opencv cvSaveImage()以BGR格式保存RGB jpg图像

时间:2015-03-22 09:07:56

标签: opencv

我正在将我的bgr图像转换为rgb图像,然后将其保存到磁盘,但保存的图像不是rgb格式。

IplImage* opencvImage_temp = cvCloneImage(inputImg);
cvCvtColor(inputImg,opencvImage_temp, CV_BGR2RGB );
opencvImage=cvCreateImage ( cvSize(480,320), opencvImage_temp->depth, opencvImage_temp->nChannels );
cvResize(opencvImage_temp, opencvImage);
cvSaveImage("stream.jpg",opencvImage_temp);

如果你们中的任何人以前遇到过这个问题,请帮帮我。

1 个答案:

答案 0 :(得分:0)

你过分思考这个问题。让OpenCV为您处理转换。试试这个实验(用C ++编写!):

Mat blueImage(200,300, CV_8UC3, Scalar(255,0,0));
imshow("Blue Image", blueImage);
imwrite("blueOut.jpg", blueImage);

Mat blueSaved = imread("blueOut.jpg");
imshow("Saved Blue Image", blueSaved);

Mat redImage;
cvtColor(blueImage, redImage, CV_BGR2RGB);
imshow("Red Image", redImage);
imwrite("redOut.jpg", redImage);

Mat redSaved = imread("redOut.jpg");
imshow("Saved Red Image", redSaved);

如果你看第一行,我们显然是用BGR格式创建一个全蓝图像。 “Blue Image”窗口证实了这一点。

当我们将BGR图像保存为jpeg时,OpenCV会在保存之前自动将该BGR图像转换为RGB。您可以通过转到包含可执行文件的目录并使用任何图像查看软件打开“blueOut.jpg”来确认这一点。

现在,如果你看一下redImage的创建,我所做的就是将BGR图像转换为RGB并查看它。惊喜,它是红色的!即使我们保存它,OpenCV也会尽职尽责地反转频道的顺序,保存的图像“redOut.jpg”为红色。

所有这一切的最终结果是,让OpenCV为您服务。您无需进行转换即可输出RGB图像。哦,并使用C ++ API。