c++ - 如何在 OpenCV 中将 RGBA 数组转换为 Mat

标签 c++ opencv bitmap

我正在寻找一种在 OpenCV 中将 RGBA 位图转换为 Mat 的方法。我试过 this , 但输出的图像颜色错误并且上下颠倒。

我使用结构数组来存储位图。

typedef struct {
    unsigned char r,g,b,a;
} BITMAP;
BITMAP* input = (BITMAP*)malloc(width*height*sizeof(BITMAP));
...
Mat image(height, width, CV_8UC4, input);

有谁知道在 OpenCV 中将 Bitmap 转换为 Mat 有什么方便的方法吗?

最佳答案

OpenCV 的 cv::Mat 使用行主要排序(首先沿着 channel 递增,然后沿着列递增,然后沿着行递增)。因此,(0, 0) 处的像素是图像中最左上角的像素。如果您的 BITMAP 将 (0, 0) 作为左下角,则图像将上下颠倒。通常,OpenCV 更喜欢 channel 的 BGRA 排序。 channel 的重新排序会弄乱颜色。

关于c++ - 如何在 OpenCV 中将 RGBA 数组转换为 Mat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39261375/

相关文章:

ios - 使用 CvVideoCamera 拍照

圆弧的Android填充路径在错误的一边

C++ Raii 和堆栈展开

c++ - CUDA项目结构

python - 错误 'module' 对象没有属性 'freetype'

python - cv2 方法的解释结果 : phaseCorrelate? | python

java - 改造获取位图

Android - 填充折线图下方的颜色

c++ - 如果 T 不是默认可构造的,如何优雅地初始化 std::array<T, n>?

c++ - 在 C++ 中分离模板接口(interface)和实现