cvMatchTemple 断言失败错误(VS2015+opencv2)

Posted

技术标签:

【中文标题】cvMatchTemple 断言失败错误(VS2015+opencv2)【英文标题】:cvMatchTemple assertion failed error (VS2015+opencv2) 【发布时间】:2016-06-15 15:52:55 【问题描述】:

我希望有人能弄清楚。

代码

int iwidth = screenImage->width - templ->width+1;
int iheight = screenImage->height - templ->height+1;

IplImage *ftmp = cvCreateImage(cvSize(iwidth, iheight), 8,1);
double max_val;
double min_val;
CvPoint min_loc;
CvPoint max_loc;
cvMatchTemplate(screenImage,templ,ftmp,0);
cvMinMaxLoc(ftmp, &min_val, &max_val, &min_loc, &max_loc, NULL);
cvRectangle(screenImage, cvPoint(min_loc.x, min_loc.y), cvPoint((min_loc.x + templ->width), (min_loc.y + templ->height)), CV_RGB(0, 255, 0), 1);
cvNamedWindow("src", 1);
cvShowImage("src", screenImage);
cvWaitKey(0);

当我运行它时,我得到了一个错误:

OpenCV 错误:断言失败 (result.size() == cv::Size(std::abs(img.cols - te mpl.cols) + 1, std::abs(img.rows - templ.rows) + 1) && result.type() == CV_32F) 在 cvMatchTemplate 中,文件 E:\opencv\opencv\sources\modules\imgproc\src\templmatch .cpp,第 1100 行

【问题讨论】:

您标记了 c++,但您使用的是 C API 不要使用过时的 C api! 【参考方案1】:

这条线产生了错误

IplImage *ftmp = cvCreateImage(cvSize(iwidth, iheight), 8,1);

应该是

IplImage *ftmp = cvCreateImage(cvSize(iwidth, iheight), 32,1);

MatchTemplate 需要结果图像应该是 32 位浮点,但你给了 8 位。这就是错误的意思

result.size() == cv::Size(std::abs(img.cols - te mpl.cols) + 1, std::abs(img.rows - templ.rows) + 1) && result.type() == CV_32F

【讨论】:

以上是关于cvMatchTemple 断言失败错误(VS2015+opencv2)的主要内容,如果未能解决你的问题,请参考以下文章

OpenCV 错误:使用 calcHist 断言失败

C-调试断言失败:_CrtIsValidHeapPointer(block)

CV2 图像错误:错误:(-215:断言失败)!ssize.empty() in function 'cv::resize'

VS Code 连接到 WSL Ubuntu 20.04 LTS,失败并出现错误:无法获取远程环境

Objective-C:断言 vs. 异常 vs. 错误

有朋友遇到“断言失败”错误提示吗,怎么解决呢?