无法在opencv中读/写图像

时间:2013-05-23 15:23:51

标签: c++ opencv

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

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

  imwrite( outImage, gray_image );

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

此代码有什么问题?

EDIT1

我更改了代码,发现代码或安装存在问题。 所以我现在有了这个代码

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的内容)Installing OpenCV 2.4.3 in Visual C++ 2010 Express

编辑2

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

对于发布使用版本库,最后没有d(例如opencv_calib3d243.lib) 而是od opencv_calib3d243d.lib)

用于调试使用最后有d的调试库,例如opencv_calib3d243d.lib

确保您使用的是基于opencv版本的正确lib名称,例如opencv_calib3d245d.lib for opencv 2.4.5。

2 个答案:

答案 0 :(得分: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。 更多关于你的依赖性(你需要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

答案 1 :(得分:1)

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