2017-02-17 8 views
-1

私のa.jpgとb.jpgの画像を一致させたい。OpenCV - Pythonで画像をマスキングする方法は?

しかし、私がマッチしたくない部分があります。

どのようにマスクする必要がありますか?

(PS:黒へ転送これらの領域を場合は、cv2.matchTemplateをもたらすであろう)

import cv2 
import numpy as np 
img1 = cv2.imread("a.jpg") 
img2 = cv2.imread("b.jpg") 
myROI = img2[183:374,293:408] 
# here I want to mask a part of myROI .. 
# It means that I don't want to match something in my picture... 
# How should I do ? 
res = cv2.matchTemplate(img1,myROI,method= eval('cv2.TM_CCOEFF_NORMED')) 

min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res) 
print max_val*100 # score 

a.jpg enter image description here

b.jpg

enter image description here

+0

次の2枚の画像だけでなく –

+0

@JeruLukeをアップロードすることができ、編集! – eason

+0

最初に 'cv2.matchTemplate()'を試してからマスキングを実行してください –

答えて

0
# -*- coding: utf-8 -*- 

import cv2 
import numpy as np 

img1 = cv2.imread("a.jpg") 
img2 = cv2.imread("b.jpg") 
mymask = cv2.imread("mask.jpg") # mask shape must = template 

# mask only run in method = CV_TM_SQDIFF and CV_TM_CCORR_NORMED. 
me= eval('cv2.TM_CCORR_NORMED') 

res1 = cv2.matchTemplate(img1,img2,method= me, mask = mymask) 
res2 = cv2.matchTemplate(img1,img2,method= eval('cv2.TM_CCORR_NORMED')) 

min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res1) 
print max_val*100 # score 1 -> 62 

min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res2) 
print max_val*100 # score 2 -> 99 

https://i.stack.imgur.com/TsqA9.jpg

B https://i.stack.imgur.com/6BemF.jpg

マスクhttps://i.stack.imgur.com/T2DZI.jpg

関連する問題