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

标签 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 格式图像的图像?

最佳答案

您可以使用 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);

关于c++ - 如何从保存 RGBA 格式图像的缓冲区在 opencv 中创建图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31854738/

相关文章:

c++ - 为什么我尝试输出一个 UTF-8 字符时得到三个不同的数字?

ios - 将字符串转换为 NSURL 返回 nil

image - 是否可以使用 FFMPEG 在视频的每一帧上叠加图像

c++ - 如何平移旋转的 OpenCV Mat

c++ - OpenCV 在实时相机提要中改变颜色

python - 如果不再支持OpenCV 2.4,如何安装?

c# - 从 C++ 在 C# 中触发事件并声明 LPCWSTR

c++ - std::atomic 平凡可复制结构

C++ 相同命名空间问题

android - 通过来自 Android 的 HTTP Post 请求发送 Base64 编码的图像