visual-c++ - OpenCV imwrite 2.2 在 Windows 7 上导致异常,消息为 "OpenCV Error: Unspecified error (could not find a writer for the specified extension)"

标签 visual-c++ windows-7 opencv

我正在将一个 OpenCV 2.2 应用程序从 Unix(可以运行)移植到 Windows 7 64 位,并且在调用 cv::imwrite 时收到以下异常

“OpenCV 错误:未知函数中的未指定错误(找不到指定扩展名的编写器,文件 highgui\src\loadsave.cpp”

原始的 unix 应用程序在我的 Mac 和 Linux 机器上运行良好。

有谁知道我可能缺少什么库或编译器配置才能使它在 Windows 上运行?

更新:

我做了以下事情来运行 OpenCV:

  • 从适用于 Windows 的 OpenCV 站点下载了 v2.2 的二进制文件。我正在使用 2.2,因为原始应用程序使用它,我不想在这个阶段使我的构建复杂化。
  • 我正在尝试写入 .png 文件。我查看了 OpenCV 代码并注意到编码器(如 Pngs 或 jpegs)需要外部库,所以我尝试写入 .ppm、.bmp,这似乎不需要 deps,但我得到了相同的错误。
  • 我的用法示例是 cv::imwrite("out.png", cv_scaled);其中 cv_scaled 是 cv::Mat 类型,格式为 CV_32FC1
  • 请记住相同的代码在 unix 中工作正常

.bmp 或 .ppm 不起作用的事实引发了更多问题:

  • 为什么这些非常简单的格式不起作用?
  • 有没有办法以编程方式查看已安装编码器的列表?

再次感谢您帮助我调试这个问题。

最佳答案

您当前安装的 OpenCV 不支持您尝试在磁盘上创建的文件格式。

检查文件的扩展名是否正确。如果是,您将不得不重新编译 OpenCV 并添加对此格式的支持,并可能安装您缺少的库。

如果没有更多信息,就只能这么说了。

编辑:

因为我也未能构建使用 OpenCV(VS2005 上的 v2.3)的 C++ 接口(interface)的应用程序,所以我最终使用了以下解决方法:在必要时将 C++ 类型转换为 C 类型。

IplImage* 转换为 cv::Mat 非常简单:

IplImage* ipl_img = cvLoadImage("test.jpg", CV_LOAD_IMAGE_UNCHANGED);
Mat mat_img(ipl_img);

imshow("window", mat_img);

cv::MatIplImage* 的转换不是很明显,但也很简单,诀窍是使用一个IplImage 而不是 IplImage*:

IplImage ipl_from_mat((IplImage)mat_img);

cvNamedWindow("window", CV_WINDOW_AUTOSIZE);
// and then pass the memory address of the variable when you need it as IplImage*
cvShowImage("window", &ipl_from_mat); 

关于visual-c++ - OpenCV imwrite 2.2 在 Windows 7 上导致异常,消息为 "OpenCV Error: Unspecified error (could not find a writer for the specified extension)",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6923296/

相关文章:

windows - 使用 VBScript 从 Windows 上下文(右键单击)菜单中选择特定菜单项?

python - 提取特征点位置有什么好办法吗

c++ - typeid 运算符返回的对象的生命周期是多少?

c++ - 如何在 IDL 中声明 IN、OPTIONAL 参数以及 OUT、RETVAL 参数

visual-c++ - "function already has a body"

Windows 7 上的 WCF 服务 URL ACL : Your process does not have access rights to this namespace

java - 在 Windows 7 上的 Eclipse Luna Release (4.4.0) 中克隆 GitHub 存储库

macos - 无法在 python 中导入打开的 cv2。错误 : Cannot compile 'Python.h' . 也许你需要安装 python-dev|python-devel [[无法升级 numpy ]]

python - 合并来自两个不同文件夹的两个图像(python)

c++ - 未处理的异常 :Access violation reading location 0x00000004