关于opencv中,模板匹配函数cvMatchTemplete()的使用问题

jiabin520 2018-07-19 05:18:24
编译都没问题,就是调试到cvMatchTemplete()那个语句的时候程序又了异常。
给的提示语是这个:Assertion failed (result.size() == cv::Size(std::abs(img.cols - templ.cols) + 1, std::abs(img.rows - templ.rows) + 1) && result.type() == 5) in cvMatchTemplate, 但是我反复检查代码,reslut的size确实是这么定义的,所以想请教一下究竟是哪里出了问题
t1:
t2:
代码如下:

#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>
#include <stdio.h>

using namespace std;
using namespace cv;

int main()
{
IplImage* img = cvLoadImage("C:\\t2.jpg",1);
IplImage* templ = cvLoadImage("C:\\t1.jpg",1);
int result_cols = img->width - templ->width + 1;
int result_rows = img->height - templ->height + 1;
IplImage* result = cvCreateImage(cvSize(result_cols, result_rows), IPL_DEPTH_32F, 3);

cvMatchTemplate(img, templ, result, CV_TM_SQDIFF_NORMED);//这里使用的匹配算法是标准平方差匹配 method=CV_TM_SQDIFF_NORMED,数值越小匹配度越好
cvNormalize(result, result, 0, 1, NORM_MINMAX);

double minVal = -1;
double maxVal;
CvPoint minLoc;
CvPoint maxLoc;
CvPoint matchLoc;
cout << "匹配度:" << minVal << endl;
cvMinMaxLoc(result, &minVal, &maxVal, &minLoc, &maxLoc, NULL);

cout << "匹配度:" << minVal << endl;

matchLoc = minLoc;

cvRectangle(img, matchLoc, cvPoint(matchLoc.x + templ->width, matchLoc.y + templ->height), cvScalar(0, 255, 0), 2, 8, 0);

cvShowImage("img", img);
cvWaitKey(0);
return 0;
}

...全文
159 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiabin520 2018-07-19
  • 打赏
  • 举报
回复
引用 1 楼 zmlovelx 的回复:
result.type() == 5 这个的原因吧。

那要怎么解决呀,书上说的result的类型可以是8位或32位的,很奇怪。。。
帅得不敢出门 2018-07-19
  • 打赏
  • 举报
回复
result.type() == 5 这个的原因吧。

4,246

社区成员

发帖
与我相关
我的任务
社区描述
OpenCV相关技术交流专区
计算机视觉人工智能opencv 技术论坛(原bbs) 广东省·深圳市
社区管理员
  • OpenCV
  • 幻灰龙
  • OpenCV中国团队
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

OpenCV中国团队官方博客:https://blog.csdn.net/opencvchina

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