我想找出某个子图像出现在源图像的哪个位置(例如源图像:http: //i.pictr.com/6xg895m69q.png,子图像:http://i.pictr. com/jdaz9zwzej.png)。据我所知,有必要转换数组以使它们对 OpenCV “可读”,这是我尝试过的,但由于某种原因,它不起作用。到目前为止,这是我的代码:
from PIL import Image
import numpy
from pylab import *
import cv2
import cv
image = cv2.imread('source_img.jpg')
template = cv2.imread('template_img.jpg')
im = cv.fromarray(image)
templ = cv.fromarray(template)
result = numpy.zeros(shape=(1,10)) ##create a matrix with 0s
a = cv.fromarray(result)
cv.MatchTemplate(im, templ, a, cv.CV_TM_CCORR)
print result
print image
我的目标是在结果数组中写入子图像的坐标(数组的其余部分应保持值 0(我知道我的代码到现在都不会做到这一点)。这是错误消息,我在执行时得到编码:
OpenCV 错误:断言失败 (result.size() == cv::Size(std::abs(img.cols - templ.cols) + 1, std::abs(img.rows - templ.rows) + 1) && result.type() == CV_32F) 在 cvMatchTemplate,文件 /opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_release_tarballs_ports_graphics_opencv/opencv/work/OpenCV-2.4.3/modules/imgproc/src/templmatch.cpp ,第 376 行 Traceback(最近一次调用最后一次):文件“/Users/strongbow/imagerecognition.py”,第 27 行,在 cv.MatchTemplate(im, templ, a, cv.CV_TM_CCORR) cv2.error: result.size() == cv::Size(std::abs(img.cols - templ.cols) + 1, std::abs(img.rows - templ.rows) + 1) && result.type() == CV_32F
我是 OpenCV 的新手,真的不知道如何处理这个错误消息。任何人的想法/指针怎么办?