我正在使用这些代码来检测小图片是否是大图片的一部分。 (或者如果小图片可以在大图中找到的话,可以把它当作)
这是大图片
这是小图片
它工作正常,并给我x_coordinate小图片开始。
import cv2
import numpy as np
big_pic = cv2.imread("c:\\big.jpg")
small_pic = cv2.imread('c:\\small.jpg')
res = cv2.matchTemplate(big_pic,small_pic,cv2.TM_CCOEFF_NORMED)
threshold = 0.99
loc = np.where (res >= threshold)
x_coordinate = list(loc[0])
print x_coordinate
然而,当我想在大图片中指定检测区域时 - 也就是说,如果在大图片的某个部分可以找到小图片 - 它就会失败。
big_pic = cv2.imread("c:\\big.jpg")
target_area = big_pic[0:0, 238:220]
small_pic = cv2.imread('c:\\small.jpg')
res = cv2.matchTemplate(target_area,small_pic,cv2.TM_CCOEFF_NORMED)
threshold = 0.99
loc = np.where (res >= threshold)
x_coordinate = list(loc[0])
print x_coordinate
错误说:
OpenCV错误:cv :: crossCorr中的断言失败(corrsize.height< = img.rows + templ.rows - 1&& corrsize.width< = img.cols + templ.cols - 1),文件...... \ opencv-3.1.0 \ modules \ imgproc \ src \ templmatch.cpp,第658行 Traceback(最近一次调用最后一次): File" C:\ Python27 \ discover picture.py",第8行,in res = cv2.matchTemplate(target_area,small_pic,cv2.TM_CCOEFF_NORMED) cv2.error:...... \ opencv-3.1.0 \ modules \ imgproc \ src \ templmatch.cpp:658:错误:(-215)corrsize.height< = img.rows + templ.rows - 1 &安培;&安培;函数cv :: crossCorr中的corrsize.width< = img.cols + templ.cols - 1
出了什么问题?谢谢。
答案 0 :(得分:0)
似乎[y,y1:x,x1]是正确的格式。所以学分归于@ZdaR。
发布一个经过编辑的示例,使用矩形形状SMALL。
这是大图片
这是小图片
目标区域是,
big_pic = cv2.imread("c:\\big.jpg")
target_area = big_pic[0:220, 0:300] # [y,y1 : x,x1] # it returns a result.
target_area = big_pic[0:300, 0:220] # [x,x1 : y,y1] # it doesn’t return a result.
small_pic = cv2.imread('c:\\small.jpg')
res = cv2.matchTemplate(target_area,small_pic,cv2.TM_CCOEFF_NORMED)
threshold = 0.99
loc = np.where (res >= threshold)
x_coordinate = list(loc[0])
print x_coordinate
它们是BIG中的左上角和右上角。
制作如下代码:
Folder1[\/]{1}([^\/]+)[\/]{0,1}[\n]