【发布时间】:2014-11-24 02:51:41
【问题描述】:
我使用带有 opencv 3.0 的 Visual Studio 2012。 我已经检查了几篇关于这个问题的帖子,但是当我运行这段代码时,我仍然收到断言失败错误 -215:
IplImage * imageOriginal = cvLoadImage("road1.jpg"); int width = 0, height = 0; width = imageOriginal->width; height = imageOriginal->height; IplImage* img = cvCreateImage(cvGetSize(imageOriginal), imageOriginal->depth , 3); CvRect cropRect = cvRect(0, 0, width -10, height -10 ); // ROI in source image cvSetImageROI(imageOriginal, cropRect); try { cvCopy(imageOriginal, img, NULL); // Copies only crop region } catch (cv::Exception& e) { cout << e.what() << endl; } cvResetImageROI(imageOriginal); cvShowImage( "Original ROI", img); waitKey();
如果我将矩形保留为全尺寸CvRect cropRect = cvRect(0, 0, width, height);,我不会出错。有什么问题?
【问题讨论】:
-
你确定你的宽高不小于10,如果是,那么裁剪区域的有效高和宽会小于等于0,这可能就是你看到的原因断言失败。
-
您是否在所有负载/创建中检查了 nullptr?如果宽度为 0,则在当前代码中得到 -10。
-
一般来说,为什么不使用 cvRect,改变第三个和第四个参数,看看什么时候会出错。删除所有其他代码。试试 cvRect(0, 0, 100, 100);然后 cvRect(0, 0, 200, 200);以此类推
-
如果我输入一个小于图像大小 (648x482) 的整数,我仍然会收到错误,并且我肯定会加载图像,没有 NULL 指针扩展。
-
我不确定,将内存分配给原始大小的图像并仅复制裁剪部分是否不正确?为什么不转换为新的
Mat?