はじまる

適当な事を適当に書く

Python & OpenCV で 画像に含まれる円を検出する

元ネタはこれです。

Hough Circle Transform — OpenCV-Python Tutorials 1 documentation

#detect_circle.py

import sys
import cv2
import numpy as np

args = sys.argv

img = cv2.imread(args[1], 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,:]:
    # draw the outer circle
        cv2.circle(cimg,(i[0],i[1]),i[2],(0,255,0),2)
    # draw the center of the circle
        cv2.circle(cimg,(i[0],i[1]),2,(0,0,255),3)

cv2.imwrite('detected_' + args[1], cimg)

コマンドラインから下記のように使います。

$python detect_circle.py target.jpg

やってみた1

元画像

上記リンクでの例

f:id:satorusangakoronda:20170327214319p:plain

検出結果画像

検出された円が、線画で上書きされています。

f:id:satorusangakoronda:20170327214349p:plain

やってみた2

元画像

ぱくたそのやつ。ポンポンが丸として検出されることを期待。 f:id:satorusangakoronda:20170327214518p:plain

検出結果画像

ナンジャコリャ f:id:satorusangakoronda:20170327214553p:plain

得手不得手があるみたいですね。