OpenCV无法使用imwrite写入图像

时间:2013-01-07 03:31:08

标签: c++ image-processing opencv

我正在尝试将我创建的Mat格式写入jpeg文件,但我得到的是一个未处理的异常。从文档中可以看出

  

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

所以我使用下面的代码创建了一个Mat:

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

但是,我无法将图像写入jpeg。它适用于BMP格式,但不是JPG或任何其他格式。我被建议将其转换为CV_16U或8U,但它不能正常工作,我对C:\目录有写权限。

我错过了一步吗?或者我还有其他方法可以使用OpenCV将图像保存到JPG中吗?

2 个答案:

答案 0 :(得分:3)

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

我在opencv3.1和x64位找到的问题 - 调试模式

  1. imwrite(filename,image)获取异常(读取访问冲突)。
  2. haarCascade.detectMultiScale(...)检测到大量对象。
  3. 要修复这些问题,请在发布模式下运行应用程序。

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

答案 1 :(得分:-2)

此代码工作正常并make / rewrite“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,Wascana Eclipse(MinGW GCC编译器),Opencv 2.4.5