回答編集履歴
2
ついでに
test
CHANGED
@@ -22,6 +22,16 @@
|
|
22
22
|
|
23
23
|
|
24
24
|
|
25
|
+
#### ついでに
|
26
|
+
|
27
|
+
forループからnumpyで一括操作する手法に修正してみました。
|
28
|
+
|
29
|
+
ディープコピーなどを心配せずにかつ高速で処理できます。
|
30
|
+
|
31
|
+
参考:[python,OpenCV,numpyによる色抽出・変換](https://teratail.com/questions/100301)
|
32
|
+
|
33
|
+
|
34
|
+
|
25
35
|
> また、クリックした地点から数ピクセル離れたところの色情報が取得される。
|
26
36
|
|
27
37
|
|
@@ -35,6 +45,8 @@
|
|
35
45
|
|
36
46
|
|
37
47
|
```Python
|
48
|
+
|
49
|
+
|
38
50
|
|
39
51
|
from PIL import Image
|
40
52
|
|
@@ -60,7 +72,9 @@
|
|
60
72
|
|
61
73
|
def onclick(self,event):
|
62
74
|
|
75
|
+
|
76
|
+
|
63
|
-
|
77
|
+
""" forループする手法
|
64
78
|
|
65
79
|
plist = np.copy(self.image[int(event.ydata)][int(event.xdata)]) # 自身のピクセル値がかわらないようにディープコピーする!
|
66
80
|
|
@@ -75,6 +89,20 @@
|
|
75
89
|
if (self.image[i][j] == plist).all():
|
76
90
|
|
77
91
|
self.image[i][j] = [255, 255, 255]
|
92
|
+
|
93
|
+
"""
|
94
|
+
|
95
|
+
|
96
|
+
|
97
|
+
# numpy一括操作する手法
|
98
|
+
|
99
|
+
# python,OpenCV,numpyによる色抽出・変換
|
100
|
+
|
101
|
+
# https://teratail.com/questions/100301
|
102
|
+
|
103
|
+
plist = self.image[int(event.ydata)][int(event.xdata)]
|
104
|
+
|
105
|
+
self.image[np.logical_and.reduce(self.image == plist, axis=2)] = [255,255,255]
|
78
106
|
|
79
107
|
|
80
108
|
|
1
原因を追記
test
CHANGED
@@ -9,6 +9,16 @@
|
|
9
9
|
中途半端というのがよく分からないのですが、クリックのたびに新しいウインドウが表示されました。
|
10
10
|
|
11
11
|
これは意図した動作ではないと思われるので、最後に示すように、ウインドウ内の画像更新するようにコード修正しました。
|
12
|
+
|
13
|
+
|
14
|
+
|
15
|
+
#### 原因を追記
|
16
|
+
|
17
|
+
現象再現できました。`plist`は実際には画像のクリックされたセル値を**指している**だけです。
|
18
|
+
|
19
|
+
よってforループ中にクリックされたピクセル値の値を更新すると**plist**の値も更新され、それ以降の判定がおかしくなってしまっています。
|
20
|
+
|
21
|
+
回避するには**plist**に対して実値を(深い)コピー代入する必要があります。
|
12
22
|
|
13
23
|
|
14
24
|
|
@@ -50,7 +60,9 @@
|
|
50
60
|
|
51
61
|
def onclick(self,event):
|
52
62
|
|
53
|
-
plist=self.image[int(event.ydata)][int(event.xdata)]
|
63
|
+
#plist = self.image[int(event.ydata)][int(event.xdata)]
|
64
|
+
|
65
|
+
plist = np.copy(self.image[int(event.ydata)][int(event.xdata)]) # 自身のピクセル値がかわらないようにディープコピーする!
|
54
66
|
|
55
67
|
print(plist)
|
56
68
|
|
@@ -84,9 +96,19 @@
|
|
84
96
|
|
85
97
|
# 画像を読み込む
|
86
98
|
|
87
|
-
img = Image.open( "./
|
99
|
+
img = Image.open( "./test.png") #
|
88
100
|
|
89
101
|
img=np.array(img)
|
102
|
+
|
103
|
+
|
104
|
+
|
105
|
+
# pngのアルファチャンネルを除去する
|
106
|
+
|
107
|
+
if img.shape[2] == 4:
|
108
|
+
|
109
|
+
img = img[:,:,0:3]
|
110
|
+
|
111
|
+
|
90
112
|
|
91
113
|
fig=plt.figure()
|
92
114
|
|
@@ -104,4 +126,4 @@
|
|
104
126
|
|
105
127
|
```
|
106
128
|
|
107
|
-
![イメージ説明](
|
129
|
+
![イメージ説明](842858f76ff96275ef758f8af63475e4.png)
|