Python을 사용하여 이미지에서 Hough 변환을 수행하는 방법
요약:
Hough 변환은 이미지에서 직선이나 특정 모양을 감지하는 데 일반적으로 사용되는 이미지 처리 기술입니다. 이 기사에서는 Python에서 OpenCV 라이브러리를 사용하여 Hough 변환을 구현하는 방법을 소개하고 코드 예제를 통해 구현 프로세스를 자세히 설명합니다.
소개:
Hough 변환은 1962년 Hough가 제안한 이미지 처리 기술로 원래 이미지에서 직선을 감지하는 데 사용되었습니다. 그 후 Hough 변환은 원, 타원 및 기타 모양을 감지하기 위해 널리 사용되고 확장되었습니다. 컴퓨터 비전 및 이미지 처리 분야에서 Hough 변환은 매우 중요한 도구입니다.
1. 허프 변환의 원리
허프 변환의 기본 원리는 이미지의 각 픽셀을 극좌표(허프 공간) 공간의 곡선(또는 매개변수 공간)으로 변환하는 것입니다. 직선의 경우 두 매개변수는 각각 직선의 거리와 각도를 나타냅니다. 매개변수 공간에서 점을 선택하고 곡선에서 교차점을 찾으면 원본 이미지의 모든 직선을 얻을 수 있습니다.
2. OpenCV 라이브러리 소개
OpenCV는 풍부한 이미지 처리 및 컴퓨터 비전 알고리즘을 제공하는 오픈 소스 컴퓨터 비전 및 기계 학습 소프트웨어 라이브러리입니다. 강력한 이미지 처리 기능과 사용하기 쉬운 인터페이스를 갖춘 Python에서 가장 인기 있는 이미지 처리 라이브러리 중 하나입니다. 이 기사에서는 OpenCV 라이브러리를 사용하여 Hough 변환을 구현합니다.
3. Python을 사용하여 Hough 변환 수행
다음에서는 Python을 사용하여 이미지에서 Hough 변환을 수행하는 방법을 보여 주는 구체적인 예를 사용합니다.
먼저 필요한 라이브러리를 가져와야 합니다.
import cv2 import numpy as np import matplotlib.pyplot as plt
그런 다음 원본 이미지를 읽고 표시합니다.
image = cv2.imread("image.jpg") plt.imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB)) plt.axis('off') plt.show()
다음으로 이미지를 회색조로 변환합니다.
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
그런 다음 이미지에서 가장자리 감지를 수행합니다.
edges = cv2.Canny(gray, 50, 150)
다음으로 Hough 변환을 수행합니다.
lines = cv2.HoughLines(edges, 1, np.pi/180, 200)
감지된 직선을 탐색하고 그립니다.
for line in lines: rho, theta = line[0] a = np.cos(theta) b = np.sin(theta) x0 = a*rho y0 = b*rho x1 = int(x0 + 1000*(-b)) y1 = int(y0 + 1000*(a)) x2 = int(x0 - 1000*(-b)) y2 = int(y0 - 1000*(a)) cv2.line(image, (x1, y1), (x2, y2), (0, 0, 255), 2)
마지막으로 처리된 이미지를 표시합니다.
plt.imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB)) plt.axis('off') plt.show()
결론:
이 문서에서는 Python에서 OpenCV 라이브러리를 사용하여 이미지를 변환하는 방법을 자세히 설명합니다. Hough 수행 변환. 샘플 코드를 통해 직선 감지에 있어서 Hough 변환의 강력한 능력을 확인할 수 있습니다. 직선 외에도 OpenCV는 다른 모양의 Hough 변환 구현도 제공하므로 독자는 더 자세히 배우고 시도해 볼 수 있습니다.
참조:
부록:
전체 코드는 아래 코드 블록을 참조하세요.
import cv2 import numpy as np import matplotlib.pyplot as plt # 读取并显示原始图像 image = cv2.imread("image.jpg") plt.imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB)) plt.axis('off') plt.show() # 将图像转换为灰度图像 gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # 对图像进行边缘检测 edges = cv2.Canny(gray, 50, 150) # 进行霍夫变换 lines = cv2.HoughLines(edges, 1, np.pi/180, 200) # 遍历并绘制检测到的直线 for line in lines: rho, theta = line[0] a = np.cos(theta) b = np.sin(theta) x0 = a*rho y0 = b*rho x1 = int(x0 + 1000*(-b)) y1 = int(y0 + 1000*(a)) x2 = int(x0 - 1000*(-b)) y2 = int(y0 - 1000*(a)) cv2.line(image, (x1, y1), (x2, y2), (0, 0, 255), 2) # 显示处理后的图像 plt.imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB)) plt.axis('off') plt.show()
참고: 코드의 "image.jpg"
를 원하는 이미지 경로로 바꾸세요.
위 내용은 Python을 사용하여 이미지에서 Hough 변환을 수행하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!