抛出 'cv::Exception' 实例后,OpenCV 中出现错误标志错误。 cvGetMat 中不支持的数组类型
Posted
技术标签:
【中文标题】抛出 \'cv::Exception\' 实例后,OpenCV 中出现错误标志错误。 cvGetMat 中不支持的数组类型【英文标题】:Bad flag error in OpenCV after throwing an instance of 'cv::Exception' . Unsupported array type in cvGetMat抛出 'cv::Exception' 实例后,OpenCV 中出现错误标志错误。 cvGetMat 中不支持的数组类型 【发布时间】:2013-12-26 13:43:17 【问题描述】:我是 OpenCV 新手,正在尝试读取文件夹中的图像序列。我的代码如下:
#include <stdio.h>
#include <opencv2/opencv.hpp>
#include <cv.h>
#include <highgui.h>
#include <iostream>
using namespace cv;
using namespace std;
void loadImage(Mat image,int number)
char filename[100];
strcpy(filename, "/home/folder1/imagefolder/");
char frameNo[10];
sprintf(frameNo, "%08i", number);
strcat(filename, frameNo);
strcat(filename, ".png");
cout<< filename;
image = imread(filename);
if (image.empty()) //check whether the image is loaded or not
cout << "Error : Image not loaded." << endl;
int main()
Mat image;
int nImages=8;
for (int i = 1; i < nImages; i++)
loadImage(image,i);
namedWindow( "Display Image", CV_WINDOW_AUTOSIZE );
imshow( "Display Image", image );
waitKey(100000);
return 0;
它被编译了,但是在运行可执行文件时,它给出了以下错误:
OpenCV 错误:cvGetMat,文件 /home/vuadmin/OpenCV-2.3.1/modules/core/src/array.cpp,第 2482 行中的错误标志(参数或结构字段)(无法识别或不支持的数组类型) 在抛出 'cv::Exception' 的实例后调用终止 what():/home/vuadmin/OpenCV-2.3.1/modules/core/src/array.cpp:2482:错误:(-206)函数cvGetMat中无法识别或不支持的数组类型 中止(核心转储)
请帮我找出错误。
我还尝试了其他方法 OpenCV: Reading image series from a folder
但在我的情况下,它只显示第一张图片。
【问题讨论】:
【参考方案1】:我发现您的代码中有几个错误:
您的原型void loadImage(Mat image,int number)
复制了 cv::Mat 图像,因此在调用此函数后,image
为空。您应该通过引用设置图像
void loadImage(Mat& image,int number)
在这种情况下,imshow( "Display Image", image );
image
参数可能不为空。这可能会导致您的 openCV 错误
在程序的入口点中还有一件事,您在循环中创建了一个return 0;
,因此程序在第一次迭代时以代码值 0 退出。将 return 放在循环之后。顺便说一句,你应该“打开”一次窗口,而不是每次迭代,但我认为这不会导致任何错误。
int main()
Mat image;
int nImages=8;
namedWindow( "Display Image", CV_WINDOW_AUTOSIZE );
for (int i = 1; i < nImages; i++)
loadImage(image,i);
imshow( "Display Image", image );
waitKey(100000);
return 0;
您必须在调用 loadImage(image, i)
后检查图像的有效性,因为在您的函数内部,标准输出上会打印一条错误消息,但在您的循环中,您不会对图像进行任何检查
loadImage(image, i);
if ( ! image.empty ())
imshow( "Display Image", image );
waitKey(100000);
【讨论】:
非常感谢您的回答!我没有改变return语句的位置,但是Mat Image创建了一个pr0blem.....需要刷基本的c++:(【参考方案2】:我在 Java 中使用 OpenCV 时遇到了同样的错误。我意识到问题不在于我使用的图像或框架,而是 HaarCascade 文件。我会尝试不同的级联文件(您可以在 OpenCV 网站上找到它们),包括 Haar 级联文件和 LBP 级联文件。
希望对您有所帮助。干杯
【讨论】:
以上是关于抛出 'cv::Exception' 实例后,OpenCV 中出现错误标志错误。 cvGetMat 中不支持的数组类型的主要内容,如果未能解决你的问题,请参考以下文章
从 std::vector<int> 模糊 Mat 导致的错误指针:cv::Exception
导入 tensorflow 错误:在抛出“Xbyak::Error”实例后调用终止