我在OpenCV中使用cvPyrMeansShiftFiltering()函数时遇到问题。对它的任何调用都会导致“断言失败”消息。
以下代码在调用cvPryMeanShiftFiltering的行上失败:
#include "cv.h"
#include "highgui.h"
#include "cxcore.h"
#include <iostream>
using namespace std;
int main()
{
string imageFile = "..\\bear.jpg";
IplImage* src = cvLoadImage(imageFile.c_str());
int width = src->width;
int height = src->height;
IplImage* result = cvCreateImage(cvSize(width,height),8,3);
cvPyrMeanShiftFiltering(src,result,4.0,4.0,0);
cvReleaseImage(&src);
cvReleaseImage(&result);
return 0;
}
程序一直运行,直到将以下错误消息发送到控制台:
OpenCV错误:断言失败(udata&lt;(uchar *)ptr&amp;&amp; ((uchar *)ptr - udata)&lt; =(ptrdiff_t)(sizeof(void *)+ 16))在未知函数中,文件...... \ src \ cxcore \ cxalloc.cpp,第76行
失败的断言在cxalloc.cpp中的cv :: fastFree()中。该程序在VS 2008上运行在Windows 7(64位)上.OpenCV版本为2.0。
我将补充一点,我也在VS2008和VS2010上尝试使用OpenCV 2.1。所以必须是我正在做的事情,对吗?为什么我会收到此错误?
答案 0 :(得分:0)
尝试使用最后一个参数!= 0.该参数(max_level
)描述了将使用多少级别的金字塔进行分割,并且没有意义为0。
答案 1 :(得分:0)
我通过应用https://code.ros.org/trac/opencv/changeset/3081/trunk/opencv/modules/imgproc/src/segmentation.cpp
中描述的更改解决了类似的问题我通过创建openCV.sln项目来重新创建dll文件,如http://opencv.willowgarage.com/wiki/VisualC%2B%2B_VS2010_CMake
中所述最后一个参数也应该与0不同。