我在缓冲区中有一张图像,其中包含一张格式为 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 格式图像的图像?
最佳答案
您可以使用 cvtColor
将 Mat
从 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);
关于c++ - 如何从保存 RGBA 格式图像的缓冲区在 opencv 中创建图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31854738/