2

我有这段代码可以在 opencv 中创建和编写图像:

  char * outImage="C:/tmp/000014/outimage.jpg";
  Mat gray_image(imageWidth,imageHeight, CV_8UC1, Scalar(255));

  imwrite( outImage, gray_image );

但是当我运行这个代码时,我收到文件扩展名未知的错误,因此 iwrite 无法写入图像。

这段代码有什么问题?

编辑1

我更改了代码以查看代码或安装有问题。所以我现在有这个代码

Mat x=imread("C:/tmp/a.jpg");
imshow("Image", x);
waitKey(0);

我确定文件 c:/tmp/a.jpg 存在。

当我运行应用程序时,我收到此错误:

OpenCV Error: Bad flag (parameter or structure field) (Unrecognized or unsupported array type) in unknown function, file C:\slave\builds\WinInstallerMegaPack\src\opencv\modules\core\src\array.cpp, line 2482
C:\slave\builds\WinInstallerMegaPack\src\opencv\modules\core\src\array.cpp:2482: error: (-206) Unrecognized or unsupported array type

我按照这个答案在我的系统上安装 OpenCV(我在安装过程中使用 vc11,而不是 vc10)在 Visual C++ 2010 Express 中安装 OpenCV 2.4.3

编辑 2

问题是我混合了调试库和发布库,

对于发布,使用末尾没有 d 的发布库(例如 opencv_calib3d243.lib 而不是 od opencv_calib3d243d.lib)

对于调试,使用以 d 结尾的调试库,例如 opencv_calib3d243d.lib

确保根据您拥有的 opencv 版本使用正确的库名称,例如 opencv_calib3d245d.lib 用于 opencv 2.4.5。

4

2 回答 2

1

尝试这个:

void    write(){
    char * outImage="C:/tmp/000014/outimage.jpg";
    Mat img = Mat(Size(imageWidth,imageHeight), CV_8UC1, Scalar(255));
    imwrite(out, img);
}

请确保您的输出路径,imageWidth,imageHeight。MoreOver 检查你的依赖(Linux下需要libjpeg8):

对于 Linux

sudo apt-get install libpng12-0 libpng12-dev libpng++-dev libpng3 libpnglite-dev libpngwriter0-dev libpngwriter0c2 zlib1g-dbg zlib1g zlib1g-dev pngtools libjasper-dev libjasper-runtime libjasper1 libjpeg8 libjpeg8-dbg libjpeg62 libjpeg62-dev libjpeg-progs libtiff4-dev libtiff4 libtiffxx0c2 libtiff-tools ffmpeg libavcodec-dev libavcodec52 libavformat52 libavformat-dev libswscale0 libswscale-dev openexr libopenexr6 libopenexr-dev

对于 Windows,请遵循该指南: http ://docs.opencv.org/doc/tutorials/introduction/windows_install/windows_install.html

于 2013-05-23T16:16:19.787 回答
1

确保您没有混淆 OpenCV 的发布和调试 DLL。另外检查 x86 或 x64 DLL 是否可以工作。有时 x64 DLL 会在 x64 机器上搞砸。不知道为什么,但我不得不切换到 x86 版本。

于 2013-05-24T11:17:53.873 回答