4_14_ハフサークル変換-OpenCV中国語公式ドキュメント
ハフ変換を使用して画像内の円を見つける方法を学びます。-次の関数が表示されます:cv.HoughCircles()
仮説
円は数学的に次のように表されます。ここで、(xcenter、ycenter)は円の中心であり、rは円の半径です。方程式から、3つのパラメーターがあることがわかります。したがって、ハフ変換用の3Dアキュムレータが必要ですが、これは非常に非効率的です。したがって、OpenCVは、よりトリッキーな方法である、エッジの勾配情報を使用するハフ勾配法を使用します(ハフ勾配を理解するには、より注意を払う必要があります)。
ここで使用する関数は**cv.HoughCircles**()です。ドキュメントでよく説明されている多くのパラメータがあります。それでは、コードに直接進みましょう。
import numpy as np import cv2 as cv img = cv.imread('opencv-logo-white.png',0) img = cv.medianBlur(img,5) cimg = cv.cvtColor(img,cv.COLOR_GRAY2BGR) circles = cv.HoughCircles(img,cv.HOUGH_GRADIENT,1,20, param1=50,param2=30,minRadius=0,maxRadius=0) circles = np.uint16(np.around(circles)) for i in circles[0,:]: # 绘制外圆 cv.circle(cimg,(i[0],i[1]),i[2],(0,255,0),2) # 绘制圆心 cv.circle(cimg,(i[0],i[1]),2,(0,0,255),3) cv.imshow('detected circles',cimg) cv.waitKey(0) cv.destroyAllWindows()
結果は次のとおりです。