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 | 円の半径の最大値 |
■入力画像
■処理コード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
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) |
■結果