| HoughCircles(image, circles, method, dp, minDist, param1, param2, minRadius, maxRadius) |
|---|
ハフ変換を用いて画像内から円を検出する
| 項目 | 内容 |
|---|---|
| image | 8ビット,シングルチャンネル,グレースケールの入力画像 |
| circles | 検出された円を出力するベクトル |
| method | 現在のところCV_HOUGH_GRADIENT メソッドのみが実装 |
| dp | 画像分解能に対する投票分解能の比率の逆数 |
| minDist | 検出される円の中心同士の最小距離.このパラメータが小さすぎると,正しい円の周辺に別の円が複数誤って検出される |
| param1 | 手法依存の 1 番目のパラメータ. CV_HOUGH_GRADIENT の場合は, Canny() エッジ検出器に渡される2つの閾値の内,大きい方の閾値を表す |
| param2 | 手法依存の 2 番目のパラメータ. CV_HOUGH_GRADIENT の場合は,円の中心を検出する際の投票数の閾値を表す.これが小さくなるほど,より多くの誤検出が起こる可能性がある |
| minRadius | 円の半径の最小値 |
| maxRadius | 円の半径の最大値 |
■入力画像

■処理コード
import cv2
import cv2.cv as cv
import numpy as np
img = cv2.imread('mm.jpg',0)
img = cv2.medianBlur(img,5)
cimg = cv2.cvtColor(img,cv2.COLOR_GRAY2BGR)
circles = cv2.HoughCircles(img,cv.CV_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.imshow('detected circles',cimg)
cv2.waitKey(0)
cv2.destroyAllWindows()
cv2.imwrite('output.jpg',cimg)
■結果

