opencv(python语言)中使用模板匹配函数时遇到如下错误

qingfeng__ 2017-08-07 09:47:39
错误提示如下:
Traceback (most recent call last):
File "D:/学习办公盘/python学习代码/opencv/moban.py", line 12, in <module>
res = cv2.matchTemplate(img_gray,template,cv2.TM_CCOEFF_NORMED)
error: ..\..\..\..\opencv\modules\imgproc\src\templmatch.cpp:249: error: (-215) (img.depth() == CV_8U || img.depth() == CV_32F) && img.type() == templ.type() in function cv::matchTemplate


代码:
import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('d:/学习办公盘/python学习代码/opencv/捕获.png')
img_gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

template = cv2.imread('d:/学习办公盘/python学习代码/opencv/text3.jpg')
w= template.shape[0]
w= template.shape[1]

res = cv2.matchTemplate(img_gray,template,cv2.TM_CCOEFF_NORMED)
threshold = 0.8

loc = np.where( res >= threshold)
for pt in zip(*loc[::-1]):
cv2.rectangle(img_rgb, pt, (pt[0] + w, pt[1] + h), (0,0,255), 2)

#cv2.imwrite('res.png',img_rgb)
cv2.imshow('res',img)
cv2.waitKey(0)
cv2.destroyAllWindows()


相当惆怅啊,找不到原因。有大神遇到过类似的情况吗?求指点,多谢多谢~
...全文
710 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
qingfeng__ 2017-08-21
  • 打赏
  • 举报
回复
引用 2 楼 qq_38101047 的回复:
[quote=引用 1 楼 qq_38101047 的回复:] 请问输出结果去哪了? 样例如下:

void cv::matchTemplate( InputArray 	image,
                                             InputArray 	templ,
                                             OutputArray 	result,
                                             int 	method,
                                             InputArray 	mask = noArray() 
                                             )	
参考: http://docs.opencv.org/master/df/dfb/group__imgproc__object.html#ga586ebfb0a7fb604b35a23d85391329be
非常抱歉,以上是C++的我特意用了python2.7匹配,发现是文件的读取出现问题,是没有文件数据输入,导致了匹配的异常。本人测试样例在下一楼。[/quote] 十分感谢。问题在我提出后的第二天已经解决,由于我不经常上这个论坛,只有出问题了才来,所以没有及时结贴。导致错误的原因如您所诉,是读取文件数据时没有正确读入所引发的问题。非常感谢您的帮助,同时对未及时处理致以歉意,抱歉!
ligure93 2017-08-08
  • 打赏
  • 举报
回复
这是本人使用python2.7测试匹配的代码及结果:

python code


# -*- coding: utf-8 -*-
"""
Created on Tue Aug 08 17:15:22 2017

@author: SGA-ligure
"""

import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('E:\\ligure\\code\\py\\data\\img\\ori.png',0)
temp = cv2.imread('E:\\ligure\\code\\py\\data\\img\\temp.png',0)

img2 = img.copy()
w,h = temp.shape[::-1]

method = eval('cv2.TM_CCOEFF_NORMED')
res = cv2.matchTemplate(img,temp,method)
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)

if method in [cv2.TM_SQDIFF, cv2.TM_SQDIFF_NORMED]:
top_left = min_loc
else:
top_left = max_loc
bottom_right = (top_left[0] + w, top_left[1] + h)

cv2.rectangle(img2,top_left, bottom_right, 255, 2)

plt.subplot(221), plt.imshow(img,cmap= "gray")
plt.title('Original Image'), plt.xticks([]),plt.yticks([])
plt.subplot(222), plt.imshow(temp,cmap= "gray")
plt.title('template Image'),plt.xticks([]),plt.yticks([])
plt.subplot(223), plt.imshow(res,cmap= "gray")
plt.title('Matching Result'), plt.xticks([]),plt.yticks([])
plt.subplot(224), plt.imshow(img2,cmap= "gray")
plt.title('Detected Point'),plt.xticks([]),plt.yticks([])
plt.show()



输出结果:



参考:
http://blog.csdn.net/firemicrocosm/article/details/48374979

-----------------------------------------

希望对你有所帮助。总之,楼主的代码就是文件名有问题,使数据无法载入,导致了匹配函数异常
ligure93 2017-08-08
  • 打赏
  • 举报
回复
引用 1 楼 qq_38101047 的回复:
请问输出结果去哪了? 样例如下:

void cv::matchTemplate( InputArray 	image,
                                             InputArray 	templ,
                                             OutputArray 	result,
                                             int 	method,
                                             InputArray 	mask = noArray() 
                                             )	
参考: http://docs.opencv.org/master/df/dfb/group__imgproc__object.html#ga586ebfb0a7fb604b35a23d85391329be
非常抱歉,以上是C++的我特意用了python2.7匹配,发现是文件的读取出现问题,是没有文件数据输入,导致了匹配的异常。本人测试样例在下一楼。
ligure93 2017-08-08
  • 打赏
  • 举报
回复
请问输出结果去哪了? 样例如下:

void cv::matchTemplate( InputArray 	image,
                                             InputArray 	templ,
                                             OutputArray 	result,
                                             int 	method,
                                             InputArray 	mask = noArray() 
                                             )	
参考: http://docs.opencv.org/master/df/dfb/group__imgproc__object.html#ga586ebfb0a7fb604b35a23d85391329be

37,744

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • WuKongSecurity@BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧