我正在尝试在MS Visual C ++ 2008中使用新的OpenCV 2.0 API并编写了这个简单的程序:
cv::Mat img1 = cv::imread("image.jpg",1);
cv::namedWindow("My Window", CV_WINDOW_AUTOSIZE);
cv::imshow("My Window", img1);
Visual Studio返回未处理的异常,控制台返回:
OpenCV Error: bad flag (parameter or structure field)
(Unrecognized or unsupported array type) in unknown function,
file ..\..\..\..\ocv\opencv\src\cxcore\cxarray.cpp, line 2376
不显示图像。此外,窗口“我的窗口”有一个奇怪的标题:“我的窗口”,这不依赖于名称。
使用cvLoadImage,cvNamedWindow或cvShowImage等命令的“旧”C API对同一图像文件没有任何问题。我尝试了很多不同的东西而没有成功。
我感谢你们的任何帮助。
康拉德
答案 0 :(得分:6)
正如我刚才所说,imread
也不适用于我。一个小小的谷歌搜索显示其他人有同样的问题;我想这是库代码中的一个错误。现在,这是一个hacky解决方法:
IplImage* img = cvLoadImage("lena.jpg");
cv::Mat lena(img);
cvReleaseImage(&img);
这样,您至少可以使用C ++ API来完成剩下的工作。
答案 1 :(得分:6)
这个问题有帮助。
解决方案是,链接器中通常提出的opencv库文件无法正常工作。而是尝试使用调试库文件:
在Visual C ++中:
转到Project->属性(或Alt-F7) 配置属性 - >链接器 - >输入 - >附加依赖性
取代平常 “cv210.lib cxcore210.lib highgui210.lib”by “cv210d.lib cxcore210d.lib highgui210d.lib” - 这是调试库。
OpenCv 2.0 API命令现在可以正常工作。
答案 2 :(得分:3)
我遇到了上述相同的问题,原因是链接器的设置造成的。
我在另一个帖子中找到答案, OpenCV 2.3 and Visual Studio 2010
在此重复一遍:
项目的属性(右键单击它)
- C / C ++
- 一般
- 包含目录添加 <您的目录> \ OpenCV2.3 \ include \ opencv2, <您的目录> \ OpenCV2.3 \ include \ opencv和 <您的目录> \ OpenCV2.3 \ include
链接器
- 一般
- 列表项
- 输入
- 添加所有libs,例如opencv_core230d.lib opencv_highgui230d.lib等......
完成上述操作后,我可以无缝运行imshow
和imread
+所有其他cpp函数! OP的问题可能已经解决了,但希望这对于在这里寻找相同解决方案的其他人有用。
答案 3 :(得分:2)
首先,您最好编译自己的OpenCV版本。
我在构建时遇到了同样的错误(我从 Sourceforge 获得),并通过在调试和发布版本中编译我自己的版本来解决。
并确保将原始系统env变量PATH
更改为新的构建文件夹build/bin
,然后您可以在调试模式下构建并运行imshow()
。
答案 4 :(得分:2)
您确定从/home/...
开始添加整个路径。我遇到了和你一样的问题但是当我添加整个路径时,事情就会很顺利。尽管包含文件中存在路径,但必须添加整个路径。
imread
与Matlab不同,当找不到文件/文件夹时,它不返回错误 - 而是返回一个空矩阵,而后者在imshow
期间反映为错误。
此外,imread
不会在包含的文件夹或工作区中查找图像文件。因此,尽可能指定整个路径。
请注意这一点以备将来参考。
答案 5 :(得分:0)
我相信这可能与unicode有关。
尝试使用宏_TEXT()
例如:
cv::Mat img1 = cv::imread(_TEXT("image.jpg"),1);