teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

少しシンプルに

2019/12/26 22:24

投稿

退会済みユーザー
answer CHANGED
@@ -1,38 +1,31 @@
1
1
  荒業ですが…
2
- ![イメージ説明](365f2e76866c8712ba1ef3c267139fa4.jpeg)
2
+ ![イメージ説明](89dee0e0f746f27d836ef513a9ac3b8f.png)
3
-
4
3
  ```Python3
5
4
  import cv2
6
5
  import numpy as np
7
- from scipy import ndimage as ndi
8
- from skimage.feature import peak_local_max
9
6
 
10
7
  img = cv2.imread('temp.jpeg',0)
11
8
  # img = 255-img
12
- img = cv2.medianBlur(img,11)
9
+ img_blur = cv2.medianBlur(img,11)
13
- dist = ndi.distance_transform_edt(img)
14
- dist = dist - np.min(dist)
15
- dist[dist<0.1] = 0
16
- dist = np.asarray(dist/np.max(dist)*255,np.uint8)
17
- # cv2.imshow("dist",dist)
18
10
 
19
- # cv2.imshow('img (blur)',img)
11
+ cv2.imshow('img_blur',img_blur)
20
- img[dist<32] = 0
21
12
 
22
- cv2.imshow('img (modified)',img)
23
-
24
13
  cimg = cv2.cvtColor(img,cv2.COLOR_GRAY2BGR)
25
14
 
26
- circles = cv2.HoughCircles(img,cv2.HOUGH_GRADIENT,1,1,param1=10,param2=10,minRadius=10,maxRadius=40)
15
+ circles = cv2.HoughCircles(img_blur,cv2.HOUGH_GRADIENT,1,2,param1=10,param2=8,minRadius=20,maxRadius=40)
27
16
 
28
17
  if circles is not None:
29
18
  for i in circles[0,:]:
30
- print(img[int(i[1]),int(i[0])])
19
+ # print(img[int(i[1]),int(i[0])])
31
- if 0 < img[int(i[1]),int(i[0])]:
20
+ if 0 < img_blur[int(i[1]),int(i[0])]:
32
21
  # draw the outer circle
33
22
  cv2.circle(cimg,(i[0],i[1]),i[2],(0,255,0),2)
34
23
  # draw the center of the circle
35
24
  cv2.circle(cimg,(i[0],i[1]),2,(0,0,255),3)
25
+ # else:
26
+ # cv2.circle(cimg,(i[0],i[1]),i[2],(0,64,0),1)
27
+ # cv2.circle(cimg,(i[0],i[1]),2,(0,0,64),1)
28
+
36
29
 
37
30
  cv2.imshow('detected circles',cimg)
38
31
  else:
@@ -43,6 +36,8 @@
43
36
 
44
37
  ```
45
38
 
39
+ 以下、初回投稿部分
40
+ ---
46
41
 
47
42
  > 最終面積が一番大きいところを取得する予定
48
43
  > 画像は目を二値化したもので、黒目の部分だけ抽出したいです。

1

「むしゃくしゃしてやった、後悔はしていない。」

2019/12/26 22:24

投稿

退会済みユーザー
answer CHANGED
@@ -1,3 +1,49 @@
1
+ 荒業ですが…
2
+ ![イメージ説明](365f2e76866c8712ba1ef3c267139fa4.jpeg)
3
+
4
+ ```Python3
5
+ import cv2
6
+ import numpy as np
7
+ from scipy import ndimage as ndi
8
+ from skimage.feature import peak_local_max
9
+
10
+ img = cv2.imread('temp.jpeg',0)
11
+ # img = 255-img
12
+ img = cv2.medianBlur(img,11)
13
+ dist = ndi.distance_transform_edt(img)
14
+ dist = dist - np.min(dist)
15
+ dist[dist<0.1] = 0
16
+ dist = np.asarray(dist/np.max(dist)*255,np.uint8)
17
+ # cv2.imshow("dist",dist)
18
+
19
+ # cv2.imshow('img (blur)',img)
20
+ img[dist<32] = 0
21
+
22
+ cv2.imshow('img (modified)',img)
23
+
24
+ cimg = cv2.cvtColor(img,cv2.COLOR_GRAY2BGR)
25
+
26
+ circles = cv2.HoughCircles(img,cv2.HOUGH_GRADIENT,1,1,param1=10,param2=10,minRadius=10,maxRadius=40)
27
+
28
+ if circles is not None:
29
+ for i in circles[0,:]:
30
+ print(img[int(i[1]),int(i[0])])
31
+ if 0 < img[int(i[1]),int(i[0])]:
32
+ # draw the outer circle
33
+ cv2.circle(cimg,(i[0],i[1]),i[2],(0,255,0),2)
34
+ # draw the center of the circle
35
+ cv2.circle(cimg,(i[0],i[1]),2,(0,0,255),3)
36
+
37
+ cv2.imshow('detected circles',cimg)
38
+ else:
39
+ print("No circles detected.")
40
+
41
+ cv2.waitKey(0)
42
+ cv2.destroyAllWindows()
43
+
44
+ ```
45
+
46
+
1
47
  > 最終面積が一番大きいところを取得する予定
2
48
  > 画像は目を二値化したもので、黒目の部分だけ抽出したいです。
3
49