[OpenCV] 04-14. Hough Circle Transform
🐍Python/OpenCV

[OpenCV] 04-14. Hough Circle Transform

728x90
반응형

< Hough Circle Transform >

이번 장에서는

  • 이미지 내에서 원을 찾기 위한 Hough Transform을 사용하는 법
  • cv2.HoughCircles() 함수

에 대해 봐볼 것이다.

Theory

원은 수학적으로 (xxcenter)2+(yycenter)2=r2으로 나타나는데, (xcenter,ycenter)는 원의 중앙을, r은 원의 반지름을 말한다. 방정식에서, 3개의 파라미터들을 볼 수 있는데, 그래서 hough transform을 위한 3D 축압기가 매우 비효율적이긴 하지만 필요하다. 그래서 OpenCV는 조금 더 트릭키한 방법인, 가장자리의 gradient 정보를 사용하는Hough Gradient Method 를 이용한다.

여기서 쓰는 함수는 cv2.HoughCircles() 이다. 코드를 보자

import cv2
import numpy as np

img = cv2.imread('./images/opencv.jpg',0)
img = cv2.medianBlur(img,5)
cimg = cv2.cvtColor(img,cv2.COLOR_GRAY2BGR)

circles = cv2.HoughCircles(img,cv2.HOUGH_GRADIENT,1,20,param1=50,param2=30,minRadius=0,maxRadius=0)

circles = np.uint16(np.around(circles))
for i in circles[0,:]:
    # 원 외곽선 그리기
    cv2.circle(cimg,(i[0],i[1]),i[2],(0,255,0),2)
    # 원 중심 그리기
    cv2.circle(cimg,(i[0],i[1]),2,(0,0,255),3)
cv2.imwrite("Detected.jpg",cimg)    

cv2.imshow("Detected Circles",cimg)
cv2.waitKey(0)
cv2.destroyAllWindows()

결과는 아래와 같다!


728x90
반응형