소개
cv2.HoughCircles는 OpenCV에서 이미지 내 원을 검출하는 함수로, 허프 변환(Hough Transform) 알고리즘을 사용하여 동작합니다. 이 함수는 이미지에서 원의 중심과 반지름을 찾아내는 데 효과적이며, 동전 검출, 눈동자 추적, 기하학적 모양 인식 등의 작업에 자주 사용됩니다.
기본 사용법
# 기본 사용법
import cv2
import numpy as np
# 그레이스케일 이미지 읽기
image = cv2.imread('input_image.jpg', 0)
# 가우시안 블러 적용 (노이즈 제거를 위해)
blurred_image = cv2.GaussianBlur(image, (9, 9), 2)
# 허프 변환을 사용해 원 검출
circles = cv2.HoughCircles(blurred_image, cv2.HOUGH_GRADIENT, dp=1.2, minDist=100,
param1=100, param2=30, minRadius=20, maxRadius=100)
# 원이 검출된 경우
if circles is not None:
circles = np.round(circles[0, :]).astype("int")
# 검출된 원을 이미지에 그리기
for (x, y, r) in circles:
cv2.circle(image, (x, y), r, (0, 255, 0), 4)
# 결과 이미지 창에 표시
cv2.imshow('Hough Circles', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
상세 설명
- 허프 변환을 이용한 원 검출
- cv2.HoughCircles 함수는 원을 검출하기 위해 허프 변환을 사용합니다. 이미지를 처리하여 각 픽셀을 중심으로 가능한 원의 후보를 찾고, 그 중에서 가장 잘 맞는 원을 검출합니다.
- 파라미터 설명
- image: 그레이스케일로 처리된 입력 이미지.
- cv2.HOUGH_GRADIENT: 원을 검출하기 위한 방법 (Gradient 기반 방식).
- dp: 해상도 비율, 기본적으로 1.0을 사용하지만 값을 줄이면 더 높은 해상도로 원을 검출.
- minDist: 검출된 원들 사이의 최소 거리.
- param1: cv2.Canny에 사용되는 첫 번째 임계값.
- param2: 경계값, 이 값이 작을수록 더 많은 원이 검출되지만, 잡음도 많아짐.
- minRadius: 검출할 원의 최소 반지름.
- maxRadius: 검출할 원의 최대 반지름.
- 활용
- 원 검출은 동전 탐지, 물체 추적, 교차점 탐지 등 다양한 응용 분야에서 사용됩니다. 특히, 이미지 내에서 완벽한 원을 찾는 데 매우 유용하며, 동공 검출, 기계 부품 검사와 같은 상황에서 많이 활용됩니다.
라이센스
OpenCV 4.4.0 까지는 3-clause BSD license를 따르고 있으며 자유롭게 사용, 수정, 배포할 수 있으며, 상업적 목적으로도 사용할 수 있습니다.
OpenCV 4.5.0 이상 부터는 Apache 2 License를 따르고 있습니다. 해당 라이선스는 사용, 수정, 배포, 상업적 이용을 자유롭게 허용하며, 사용자가 해당 소프트웨어의 기여자에 대한 특허 청구를 방지하도록 명시하는 것을 특징으로 합니다. 또한 수정된 코드를 배포할 때 변경 사항을 고지해야 하며, 특허 분쟁 시 관련 권리를 상실할 수 있습니다.
관련 내용
[OpenCV] 비디오 생성 및 저장하기: cv2.VideoWriter() 사용 및 설명
[OpenCV] 카메라 및 비디오 파일에서 프레임 읽기: cv2.VideoCapture() 사용 및 설명
[OpenCV] 이미지의 엣지를 보호하며 부드럽게: cv2.medianBlur() 사용 및 설명
[OpenCV] 이미지 흐리게 만들기: cv2.GaussianBlur() 사용 및 설명
[OpenCV] 이미지 색상 공간 변환: cv2.cvtColor() 사용 및 설명
[OpenCV] 이미지 축소: cv2.pyrDown() 사용 및 설명
[OpenCV] 이미지 확대: cv2.pyrUp() 사용 및 설명
[OpenCV] 원 찾기: cv2.HoughCircles() 사용 및 설명
[OpenCV] 직선 찾기: cv2.HoughLines() 사용 및 설명
[OpenCV] 경계선 찾기: cv2.Canny() 사용 및 설명
[OpenCV] 적응형 임계값 처리하기: cv2.adaptiveThreshold() 사용 및 설명
[OpenCV] 이미지 임계값 처리: cv2.threshold() 사용 및 설명
[OpenCV] 이미지의 원근 변환: cv2.warpPerspective() 사용 및 설명
[OpenCV] 이미지 기하학적 변환: cv2.warpAffine() 사용 및 설명
[OpenCV] 이미지 좌우, 상하 반전하기: cv2.flip() 사용 및 설명
[OpenCV] 이미지 회전: cv2.rotate() 사용 및 설명
[OpenCV] 이미지 크기 조절: cv2.resize() 사용 및 설명
[OpenCV] 이미지 팽창하기: cv2.dilate() 사용 및 설명
[OpenCV] 이미지 침식하기: cv2.erode() 사용 및 설명
[OpenCV] 이미지 블렌딩하기: cv2.addWeighted() 사용 및 설명
[OpenCV] 이미지 간 빼기: cv2.subtract 사용법() 사용 및 설명
[OpenCV] 이미지 간 더하기: cv2.add() 사용 및 설명
[OpenCV] 이미지에 다각형 그리기: cv2.polylines() 사용 및 설명
[OpenCV] 이미지에 원 그리기: cv2.circle() 사용 및 설명
[OpenCV] 이미지에 사각형 그리기: cv2.rectangle() 사용 및 설명
[OpenCV] 이미지에 선 그리기: cv2.line 사용법() 사용 및 설명
[OpenCV] 이미지에 텍스트 추가하기: cv2.putText() 사용 및 설명
[OpenCV] 이미지 창에 표시하기: cv2.imshow() 사용 및 설명
'함수 설명 > 컴퓨터 비전 (OpenCV, PIL)' 카테고리의 다른 글
[OpenCV] 이미지 축소: cv2.pyrDown() 사용 및 설명 (0) | 2024.09.29 |
---|---|
[OpenCV] 이미지 확대: cv2.pyrUp() 사용 및 설명 (0) | 2024.09.29 |
[OpenCV] 직선 찾기: cv2.HoughLines() 사용 및 설명 (2) | 2024.09.29 |
[OpenCV] 경계선 찾기: cv2.Canny() 사용 및 설명 (0) | 2024.09.29 |
[OpenCV] 적응형 임계값 처리하기: cv2.adaptiveThreshold() 사용 및 설명 (0) | 2024.09.29 |