4

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

使用此功能只能保存 8 位(或 16 位无符号 (CV_16U),在 PNG、JPEG 2000 和 TIFF 的情况下)单通道或 3 通道(具有“BGR”通道顺序)图像。

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

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

但是,我无法将图像写入 jpeg。它适用于 BMP 格式,但不适用于 JPG 或任何其他格式。有人建议我将其转换为 CV_16U 或 8U,但效果不佳,而且我确实对 C:\ 目录具有写权限。

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

4

2 回答 2

4

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

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

  1. imwrite(filename, image) 获取异常(读取访问冲突)。
  2. haarCascade.detectMultiScale(...) 检测大量对象。

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

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

于 2016-08-06T22:13:02.983 回答
-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、Wascana Eclipse(MinGW GCC 编译器)、Opencv 2.4.5

于 2013-06-29T08:49:00.277 回答