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 직선 검 측 에 관 한 자 료 는 다른 관련 글 을 주목 하 십시오!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.