2013-01-07 282 views
3

我正在尝试将已创建的Mat格式写入一个jpg文件,但我所得到的是一个未处理的异常。从文档中可以看出,OpenCV无法使用imwrite写入图像

“单通道或3通道(带有'BGR'通道顺序)仅8位(或16位无符号(CV_16U),PNG,JPEG 2000和TIFF)使用此功能可以保存图像。“

Mat watermark(5,5,CV_16U); 
imwrite("C:\\watermark.jpg",watermark); 

但是,我无法将图像写入JPG:

所以,我用下面的代码创建了一个垫。它适用于BMP格式。但不是JPG或任何其他格式。我被建议将其转换为CV_16U或8U,但它没有工作,我确实有权限写入C:\目录。

请指教,如果我错过了一个步骤,或者我应该如何使用opencv将图像保存为JPG。

谢谢。

+0

你确定OpenCV的JPEG支持是否到位?您可以从<< http://docs.opencv.org/doc/tutorials/introduction/display_image/display_image.html >>中快速阅读测试,看看它是否应该在该设置上工作。 –

+0

是的,我可以让我们读取JPEG图像。它的写作(写入除bmp之外的其他格式)会导致我的死亡。 – user1926691

+0

奇怪。失败时是否在控制台上显示任何错误?我看到你说你可以访问C:\但是,现在你有一个问题,你可能想要写一个C:\\ Temp \\ watermark.jpg的快速测试。除此之外,我会怀疑CV_16U的格式,我不是很专业的。 –

回答

-2

此代码正确,并/重写 “watermark.jpg”:

#include <opencv2\core\core.hpp> 
#include <opencv2\highgui\highgui.hpp> 

using namespace cv; 

int main() {  
    Mat watermark(5,5,CV_16U); 
    imwrite("C:\\watermark.jpg",watermark); 
    return 0; 
} 

我有Win7的,瓦斯卡纳的Eclipse(MinGW的GCC编译器),opencv的2.4.5

+0

这不是一个真正的答案,这个问题也是半年前的问题。 – jnovacho

4

如果您正在使用最新的opencv(v3.0)或更高版本以及Windows x64位版本某些opencv的功能在调试模式下无法正常工作......您必须在发布模式下运行代码,然后所有内容才能完美运行。

问题我发现opencv3.1和x64位 - 调试模式

  1. imwrite(文件名,图像)获取异常(读取访问冲突)。
  2. haarCascade.detectMultiScale(...)检测大量的对象。

要解决这些问题,请在发布模式下运行应用程序。

仍在寻找一种在调试模式下解决这些问题的好方法。