Python+OpenCV 이미지 처리―직선 검 측 실현

프로필:
1.호 프 변환(Hough Transform)호 프 변환 은 이미지 처리 에서 이미지 에서 기하학 적 모양 을 식별 하 는 기본 적 인 방법 중 하나 로 응용 이 광범 위 하고 개선 알고리즘 도 많다.주로 이미지 에서 같은 특징 을 가 진 기하학 적 모양(예 를 들 어 직선,원 등)을 분리 하 는 데 사용 된다.가장 기본 적 인 호 프 변환 은 흑백 이미지 에서 직선(선분)을 감지 하 는 것 이다.
2.Hough 변환 의 원 리 는 특정한 도형 의 점 을 매개 변수 공간 으로 바 꾸 고 매개 변수 공간 점 의 누적 결과 에 따라 최대 값 에 대응 하 는 해 를 찾 는 것 이다.그러면 이 해 는 찾 아야 할 기하학 적 인 모양 의 매개 변수(예 를 들 어 직선 이 라면 직선 적 인 기울 임 률 k 와 상 숙 b,원 은 원심 과 반지름 등)에 해당 한다.
3.호 프 선 변환 은 직선 을 찾 는 방법 이다.호 프 선 으로 변환 하기 전에 먼저 이미지 에 대해 가장자리 검 측 처 리 를 해 야 한다.즉,호 프 선 변환 의 직접 입력 은 가장자리 2 값 이미지 일 수 밖 에 없다.
4.호 프 직선 검 측의 구체 적 인 원 리 는 다음 과 같다.
http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/imgproc/imgtrans/hough_lines/hough_lines.html
코드 는 다음 과 같 습 니 다:

#    
#             ,    :        
import cv2 as cv
import numpy as np

#       
def line_detection(image):
 gray = cv.cvtColor(image, cv.COLOR_RGB2GRAY)
 edges = cv.Canny(gray, 50, 150, apertureSize=3) #apertureSize        3
 cv.imshow("edges", edges)
 lines = cv.HoughLines(edges, 1, np.pi/180, 80)
 for line in lines:
 rho, theta = line[0] #line[0]              ,          。
 a = np.cos(theta) #theta   
 b = np.sin(theta)
 x0 = a * rho #  x = r * cos(theta)
 y0 = b * rho #  y = r * sin(theta)
 x1 = int(x0 + 1000 * (-b)) #         
 y1 = int(y0 + 1000 * a) #         
 x2 = int(x0 - 1000 * (-b)) #         
 y2 = int(y0 - 1000 * a) #           :     1000              ,    ,       ,    ,       
 cv.line(image, (x1, y1), (x2, y2), (0, 0, 255), 2) #         ,     。
 cv.imshow("image-lines", image)

#         
def line_detect_possible_demo(image):
 gray = cv.cvtColor(image, cv.COLOR_RGB2GRAY)
 edges = cv.Canny(gray, 50, 150, apertureSize=3) # apertureSize        3
 lines = cv.HoughLinesP(edges, 1, np.pi / 180, 60, minLineLength=60, maxLineGap=5)
 for line in lines:
 x1, y1, x2, y2 = line[0]
 cv.line(image, (x1, y1), (x2, y2), (0, 0, 255), 2)
 cv.imshow("line_detect_possible_demo",image)

src = cv.imread('E:/imageload/louti.jpg')
print(src.shape)
cv.namedWindow('input_image', cv.WINDOW_AUTOSIZE) 
cv.imshow('input_image', src)
line_detection(src)
src = cv.imread('E:/imageload/louti.jpg') #        ,     src    ,          ,       
line_detect_possible_demo(src)
cv.waitKey(0)
cv.destroyAllWindows()
실행 결과:

주의:
1.opencv 의 Hough Lines 함 수 는 표준 호 프 선 변환 함수 입 니 다.이 함수 의 기능 은 매개 변수 대의 집합 을 통 해 검 측 된 직선 을 표시 하 는 것 입 니 다.그 함수 의 원형 은 Hough Lines(image,rho,theta,threshold[,lines[,srn[,stn[,min 입 니 다.theta[, max_theta]]]]]) -> lines
image 매개 변 수 는 가장자리 에서 검 측 된 출력 그림 을 표시 합 니 다.이 그림 은 단일 채널 8 비트 바 이 너 리 그림 입 니 다.
rho 매개 변 수 는 매개 변수 극 경이 픽 셀 값 단위 의 해상 도 를 나타 내 는데 여 기 는 보통 1 픽 셀 을 사용 합 니 다.
theta 매개 변 수 는 매개 변수 극 각이 라디안 단위 의 해상 도 를 나타 내 는데 여 기 는 1 도 를 사용 합 니 다.
threshold 매개 변 수 는 직선 을 검사 하 는 데 필요 한 최소한 의 곡선 교점 을 표시 합 니 다.
lines 매개 변 수 는 검 측 된 직선 매개 변수 쌍의 용 기 를 저장 하고 있 음 을 나타 낸다.
srn 매개 변수,stn 매개 변 수 는 기본적으로 0 입 니 다.srn=0 및 stn=0 이면 고전적 인 Hough 변환 을 사용 합 니 다.
min_theta 매개 변 수 는 표준 과 다 중 척도 Hough 변환 에 대해 선의 최소 각 도 를 검사 합 니 다.
max_theta 매개 변 수 는 표준 과 다 중 척도 Hough 변환 에 대해 선의 최대 각 도 를 검사 합 니 다.
2.opencv 의 Hough LinesP 함 수 는 통계 확률 호 프 선 변환 함수 로 이 함수 가 검 측 된 직선 점을 출력 할 수 있 습 니 다.그 함수 원형 은 Hough LinesP(image,rho,theta,threshold[,lines[,minLineLength[,max LineGap]])->lines 입 니 다.
image 매개 변 수 는 가장자리 에서 검 측 된 출력 그림 을 표시 합 니 다.이 그림 은 단일 채널 8 비트 바 이 너 리 그림 입 니 다.
rho 매개 변 수 는 매개 변수 극 경이 픽 셀 값 단위 의 해상 도 를 나타 내 는데 여 기 는 보통 사용 합 니 다. 1 화소
theta 매개 변 수 는 매개 변수 극 각이 라디안 단위 의 해상 도 를 나타 내 는데 여기 서 사용 합 니 다. 1 도.
threshold 매개 변 수 는 직선 을 검사 하 는 데 필요 한 최소한 의 곡선 교점 을 표시 합 니 다.
lines 매개 변 수 는 검 측 된 직선 을 저장 하 는 매개 변 수 를 표시 합 니 다.  의 용기,즉 선분 두 점 의 좌표 이다.
minLine Length 매개 변 수 는 하나의 직선 을 구성 할 수 있 는 최소 점 의 수량 을 나타 내 고 점 의 수량 이 부족 한 직선 은 버 려 집 니 다.
max Line Gap 매개 변 수 는 직선 상의 하 이 라이트 로 여 겨 질 수 있 는 최대 거 리 를 나타 낸다.
이상 은 Python+OpenCV 이미지 처리-직선 검 측 을 실현 하 는 상세 한 내용 입 니 다.python 직선 검 측 에 관 한 자 료 는 다른 관련 글 을 주목 하 십시오!

좋은 웹페이지 즐겨찾기