无法在OpenCV中使用imwrite编写灰度图像

时间:2014-03-09 20:16:49

标签: c++ opencv

我尝试将RGB图像转换为灰度,转换成功,我可以使用imshow显示它。然而,我不能用imwrite写它,imwrite函数返回NULL。我的原始图像是带有UINT8的1920 * 1080 JPEG文件。这是代码

#include <opencv\cv.h>
#include <opencv\highgui.h>

using namespace cv;

int main(int argc, char** argv)
{
char* imageName = argv[1];

Mat image;
image = imread(imageName, 1);

if (argc != 2 || !image.data)
{
    printf(" No image data \n ");
    return -1;
}

Mat gray_image;
cvtColor(image, gray_image, CV_BGR2GRAY);

if (imwrite("../../images/Gray_Image.jpg", gray_image) ==NULL) {
    printf( "Writing image is not successfull!");       
}

namedWindow(imageName, CV_WINDOW_AUTOSIZE);
namedWindow("Gray image", CV_WINDOW_AUTOSIZE);

imshow(imageName, image);
imshow("Gray image", gray_image);

waitKey(0);
return 0;
}

为什么imwrite返回NULL?

1 个答案:

答案 0 :(得分:2)

#include指令支持正斜杠。在那里使用正斜杠,以便携带。为了理智。

文件处理功能通常不支持Windows中的正斜杠。在那里使用反斜杠。或者,更好的是,使用一些路径处理类(这类通常支持正斜杠,因为它们需要是可移植的,并在Windows中自动转换为反斜杠)。

简而言之,

  • /\以解决当前问题。

也就是说,OpenCV imwrite可能不支持自动创建文件夹,所以你最好确保......

  • 指定的文件夹存在,

  • 对于相对路径(如你所知),程序执行的当前文件夹是你想象的相对路径的起始位置。