Python,Cv2,numpy来检测另一张图片中的图片

时间:2017-09-12 09:21:12

标签: python image opencv numpy

我正在使用这些代码来检测小图片是否是大图片的一部分。 (或者如果小图片可以在大图中找到的话,可以把它当作)

这是大图片

this is the BIG picture

这是小图片

enter image description here

它工作正常,并给我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

出了什么问题?谢谢。

1 个答案:

答案 0 :(得分:0)

似乎[y,y1:x,x1]是正确的格式。所以学分归于@ZdaR。

发布一个经过编辑的示例,使用矩形形状SMALL。

这是大图片

BIG

这是小图片

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]