如何从保存RGBA格式图像的缓冲区在opencv中创建图像

时间:2015-08-06 11:35:59

标签: c++ image opencv image-processing

我在缓冲区中有一个图像,其中包含RGBA格式的图像。我想从它创建一个openCV图像(cv :: Mat),但似乎我不能这样做。

我的代码是:

cv::Mat image=cv::Mat(cvSize(Width,Height), CV_8UC4,Buffer, cv::Mat::AUTO_STEP).clone();

主要问题是,由于OpenCV以BGRA格式保存图像,而缓冲区有RGBA格式的图像,因此生成图像的颜色不正确。

我知道我可以将图像转换为BGRA格式,但有没有办法在OpenCV中创建一个以RGBA格式保存图像的图像?

2 个答案:

答案 0 :(得分:1)

您使用代码创建RGBA格式的图像,这没问题。

问题是OpenCV在保存图像或使用openCV方法时会假设BGR(A)图像。

也许您可以使用特殊库(png lib,jpeg lib等)直接以RGB(A)格式保存图像。 OpenCV实际上是关于用于显示或保存图像的BGR,因为没有为图像分配颜色模型(它只是轴位3/4通道图像,无论使用何种颜色模型都必须由用户维护)。 / p>

答案 1 :(得分:1)

您可以使用cvtColorMat从RGBA转换为BGRA。如果您在创建"原始"之后立即执行此操作。来自缓冲区的Mat,您无需使用clone(),因为无论如何都会为转换后的图像分配新的缓冲区。

cv::Mat image=cv::Mat(cvSize(Width,Height), CV_8UC4, Buffer, cv::Mat::AUTO_STEP);
cv::Mat converted;
cvtColor(image, converted, CV_RGBA2BGRA);