質問編集履歴
9
methodによってcv2.matchTemplate()の返す値域が違うことに気付いたので補足
title
CHANGED
File without changes
|
body
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
openCV(Python)で、
|
4
4
|
**img**=cv2.imread(img,cv.IMREAD_GRAYSCALE)としてグレースケールで読み込むと[0,255]範囲の値を返します。
|
5
5
|
現在、テンプレートマッチングを試していますが、結果として返ってくる
|
6
|
-
**res**=cv2.matchTemplate(img,template,eval(method))は[0,1]範囲に正規化された値です。
|
6
|
+
**res**=cv2.matchTemplate(img,template,eval(method))は[0,1]範囲に正規化された値です。**__(※補足:methodにcv.TM_SQDIFF_NORMEDを使用した場合)__**
|
7
7
|
|
8
8
|
これらをmatplotlibのimshowで明示的に値域を指定した上で表示してみると、以下の様になります。
|
9
9
|
左から順に、
|
8
修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -41,8 +41,7 @@
|
|
41
41
|
img = cv.imread('mandrill.png',cv.IMREAD_GRAYSCALE)
|
42
42
|
template = cv.imread('mandrill_template.png',cv.IMREAD_GRAYSCALE)
|
43
43
|
|
44
|
-
method ='cv.TM_SQDIFF_NORMED'
|
45
|
-
res = cv.matchTemplate(img,template,
|
44
|
+
res = cv.matchTemplate(img,template,cv.TM_SQDIFF_NORMED)
|
46
45
|
|
47
46
|
print(img)#0~255の値で表されている!
|
48
47
|
print(res)#こっちは0~1の値で表されている!
|
7
修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -41,7 +41,6 @@
|
|
41
41
|
img = cv.imread('mandrill.png',cv.IMREAD_GRAYSCALE)
|
42
42
|
template = cv.imread('mandrill_template.png',cv.IMREAD_GRAYSCALE)
|
43
43
|
|
44
|
-
# All the 6 methods for comparison in a list
|
45
44
|
method ='cv.TM_SQDIFF_NORMED'
|
46
45
|
res = cv.matchTemplate(img,template,eval(method))
|
47
46
|
|
6
微修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -13,7 +13,7 @@
|
|
13
13
|
です。
|
14
14
|

|
15
15
|
|
16
|
-
そして、cv2.imshow()でも、左右の**img**([0,255]グレースケール)と**res**([0,1]グレースケール)を表示してみると、
|
16
|
+
そして、cv2.imshow()でも、左右の**img**([0,255]グレースケール)と**res**([0,1]グレースケール)を表示してみると、上の結果と同様、問題無く表示されました。問題は、中央の[0,255]範囲に戻した**res*255**を表示させようとした時です。
|
17
17
|
|
18
18
|
### 発生している問題
|
19
19
|
|
5
修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -20,7 +20,7 @@
|
|
20
20
|
ここで、私はresが正規化された値になっている事はやや混乱を招くと感じたので、imgと統一させる為にres*255として[0,255]グレースケールに戻してやりました。
|
21
21
|
そしてこれをcv2.imshow(winname,**res*255**)で試しに表示してみると、以下の様に何も表示されませんでした。
|
22
22
|

|
23
|
-
しかし、cv2.imwrite("
|
23
|
+
しかし、cv2.imwrite("filename.jpg",res*255)で保存してみると、期待している画像が保存されていました。
|
24
24
|

|
25
25
|
|
26
26
|
1. これは一体何が起こっているのでしょうか?
|
4
補足
title
CHANGED
File without changes
|
body
CHANGED
@@ -13,7 +13,7 @@
|
|
13
13
|
です。
|
14
14
|

|
15
15
|
|
16
|
-
そして、cv2.imshow()
|
16
|
+
そして、cv2.imshow()でも、左右の**img**([0,255]グレースケール)と**res**([0,1]グレースケール)を表示してみると、先ほどの結果と同様、問題無く表示されました。問題は、中央の[0,255]範囲に戻した**res*255**を表示させようとした時です。
|
17
17
|
|
18
18
|
### 発生している問題
|
19
19
|
|
3
誤字
title
CHANGED
File without changes
|
body
CHANGED
@@ -10,7 +10,7 @@
|
|
10
10
|
- plt.imshow(**res**,cmap = 'gray', vmin = 0, vmax = 1)
|
11
11
|
- plt.imshow(**res*255**,cmap = 'gray', vmin = 0, vmax = 255)
|
12
12
|
- plt.imshow(**img**,cmap = 'gray', vmin = 0, vmax = 255)
|
13
|
-
|
13
|
+
です。
|
14
14
|

|
15
15
|
|
16
16
|
そして、cv2.imshow()によりimg([0,255]グレースケール)とres([0,1]グレースケール)を表示してみると、先ほどの結果と同様、問題無く表示されました。
|
2
補足
title
CHANGED
File without changes
|
body
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
openCV(Python)で、
|
4
4
|
**img**=cv2.imread(img,cv.IMREAD_GRAYSCALE)としてグレースケールで読み込むと[0,255]範囲の値を返します。
|
5
|
-
現在、テンプレートマッチングを試していますが、
|
5
|
+
現在、テンプレートマッチングを試していますが、結果として返ってくる
|
6
6
|
**res**=cv2.matchTemplate(img,template,eval(method))は[0,1]範囲に正規化された値です。
|
7
7
|
|
8
8
|
これらをmatplotlibのimshowで明示的に値域を指定した上で表示してみると、以下の様になります。
|
1
誤字
title
CHANGED
@@ -1,1 +1,1 @@
|
|
1
|
-
cv2.imshowで[
|
1
|
+
cv2.imshowで[0,1]に正規化されたグレースケール画像を[0,255]に直して表示させようとすると上手く行かない
|
body
CHANGED
File without changes
|