荒業ですが…
Python3
1import cv2
2import numpy as np
3
4img = cv2.imread('temp.jpeg',0)
5# img = 255-img
6img_blur = cv2.medianBlur(img,11)
7
8cv2.imshow('img_blur',img_blur)
9
10cimg = cv2.cvtColor(img,cv2.COLOR_GRAY2BGR)
11
12circles = cv2.HoughCircles(img_blur,cv2.HOUGH_GRADIENT,1,2,param1=10,param2=8,minRadius=20,maxRadius=40)
13
14if circles is not None:
15 for i in circles[0,:]:
16 # print(img[int(i[1]),int(i[0])])
17 if 0 < img_blur[int(i[1]),int(i[0])]:
18 # draw the outer circle
19 cv2.circle(cimg,(i[0],i[1]),i[2],(0,255,0),2)
20 # draw the center of the circle
21 cv2.circle(cimg,(i[0],i[1]),2,(0,0,255),3)
22 # else:
23 # cv2.circle(cimg,(i[0],i[1]),i[2],(0,64,0),1)
24 # cv2.circle(cimg,(i[0],i[1]),2,(0,0,64),1)
25
26
27 cv2.imshow('detected circles',cimg)
28else:
29 print("No circles detected.")
30
31cv2.waitKey(0)
32cv2.destroyAllWindows()
33
以下、初回投稿部分
最終面積が一番大きいところを取得する予定
画像は目を二値化したもので、黒目の部分だけ抽出したいです。
二値化は便利な処理ですが、何人か指摘されていますように、恐らくここまで削減された情報から黒目らしきものを抽出するのは困難です。
黒目は~~(目玉のオヤジでもない限り)~~瞼や目の下側が欠けますので、ある程度ロバスト性のある丸の検出が必要になります。
その関数がcv2.HoughCircles()です。
その前処理として、二値化を含めcv2.adaptiveThreshold()、cv2.Canny()、また、
cv2.Laplacian()のあたりが使えるかもしれません。
外国の方で何人か古いバージョンのOpenCVで挑戦されています。
ここ1
ここ2
どのパラメータが当たりかはやってみて試すしかないと思います。