【发布时间】:2015-08-06 11:35:58
【问题描述】:
我在缓冲区中有一个图像,其中包含一个 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 格式图像的图像?
【问题讨论】:
-
但是所有将图像作为输入的算法都使用 BGRA,所以最好用这种方式创建它。
-
@AnderBiguri 缓冲区在 rgba 中,所以我无法在 bgra 中创建它。我可以吗?
-
我不擅长openCV,但我想你可以克隆它,然后以某种方式交换通道数据,对吧?
-
@AnderBiguri 你说得对,我可以将它转换为 BGRA,但我的问题是我是否可以在不转换的情况下使用它。
-
我们又循环了。我的第一条评论的意思是:我你也许能做到(我不知道),但如果以后你想使用将图像作为输入的 openCV 算法,你可能不想这样做,因为它们被设计为接受 BGRA。最后,它只是重新编码了数据,如果您所做的一切都知道红色是第一个通道,那么就照原样使用它。
标签: c++ image opencv image-processing