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

opencv cvSaveImage()以BGR格式保存RGB jpg图像,opencv,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->nChanne

我正在将我的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);

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

你对这个问题考虑得太多了。让OpenCV为您处理转换。试试这个实验(在C++中):

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

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

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


所有这些的最终结果是,让OpenCV为您工作。输出RGB图像无需进行转换。哦,使用C++ API。<请转到OpenCV的C++ API。(而且,所有图像都是opencv中的bgr,而不是rgb)是的,我知道,我关心的是将图像以rgb格式保存在磁盘上。你知道如何做到这一点吗。感谢您对openCV的回复。尝试一些专门的扩展库。感谢这么好的解释,实际上我是从opencv获取图像并在gtk窗口中显示的,这就是为什么我要进行转换,我想将转换后的图像保存到磁盘上。
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);