Pythonで円を認識する

 今回は、Pythonで円の検出をしていきます。

 ハフ変換というのが円を見つけるのに使えるので、opencvに入ってるものを使っていきます。

import cv2
import numpy as np

#カメラ認識
cap = cv2.VideoCapture(0)

while(True):
    #映像取得
    ret, frame = cap.read()
    if ret == False:
            continue
    #左右反転
    frame = frame[:,::-1]
    #グレースケール化
    gray = cv2.cvtColor(frame, cv2.COLOR_RGB2GRAY)
    #平滑化
    gray = cv2.GaussianBlur(gray, (35,35), 1)
    #バッファ作成
    img = frame.copy()
    #円の検出
    circles = cv2.HoughCircles(gray, cv2.HOUGH_GRADIENT, 1, 30, param1=80, param2=70, minRadius=10, maxRadius=100)
    if circles is not None:
        circles = np.uint16(np.around(circles))
        for i in circles[0,:]:
            cv2.circle(img,(i[0],i[1]),i[2],(255,255,0),2)
            cv2.circle(img,(i[0],i[1]),2,(0,0,255),3)

    #結果表示
    cv2.imshow('img', img)

    if cv2.waitKey(1) & 0xFF == ord("q"):
        break

cap.release()
cv2.destroyAllWindows()

 グレースケール化はハフ変換をするのに必要なことです。

 また、途中の平滑化はハフ変換の精度が上がるみたいなので適当にブラーかけてます。