将 Mat 中的 RGB 图像转换为 MFC 中的 BYTE *

Posted

技术标签:

【中文标题】将 Mat 中的 RGB 图像转换为 MFC 中的 BYTE *【英文标题】:Convert RGB image in Mat to BYTE * in MFC 【发布时间】:2014-12-18 01:52:51 【问题描述】:

很抱歉把它放在这里,但opencv 网站已关闭或我无法访问那里的主题。我正在阅读Mat 中的RGB image,而不是尝试使用以下函数将其转换为BYTE*,但它并没有给我准确的图像,而是扭曲了部分图像。请任何人都可以帮助我在这里我弄错了。谢谢。

BYTE *change_to_BYTE(Mat matrix_value)


    BYTE* v_char_new = new BYTE[matrix_value.rows * matrix_value.cols * 3]();


    vector<byte> v_char;
    for(int i = 0; i < matrix_value.rows; i++)
       
        for(int j = 0; j < matrix_value.cols; j++)
        
            v_char_new[((i*matrix_value.cols+j) * 3)+0] = (*(uchar*)((matrix_value.data+ i*matrix_value.step + j + 0)));             
            v_char_new[((i*matrix_value.cols+j) * 3)+1] = (*(uchar*)((matrix_value.data+ i*matrix_value.step + j +1))); 
            v_char_new[((i*matrix_value.cols+j) * 3)+2] = (*(uchar*)((matrix_value.data+ i*matrix_value.step + j +2))); 
                   
    

    return v_char_new;

【问题讨论】:

“图像的某些部分失真”是什么意思?什么样的失真? 结果图像显示输入图像的 1/3。我得到了它的工作,但会在一天后发布答案 【参考方案1】:

在以不同方式检查后,这对我有用。

  BYTE *Ctest_face_projectDlg::change_to_BYTE(Mat matrix_value)
    

        BYTE* v_char_new = new BYTE[matrix_value.rows * matrix_value.cols * 3]();

        for(int i = 0; i < matrix_value.rows; i++)
        
           for(int j = 0; j < matrix_value.cols; j++)
           
               Vec3b bgrPixel = matrix_value.at<Vec3b>(i, j);
               v_char_new[((i*matrix_value.cols+j)*3)+0] = bgrPixel.val[0];
               v_char_new[((i*matrix_value.cols+j)*3)+1] = bgrPixel.val[1]; 
               v_char_new[((i*matrix_value.cols+j)*3)+2] = bgrPixel.val[2];
               // do something with BGR values...
           
        
    

【讨论】:

以上是关于将 Mat 中的 RGB 图像转换为 MFC 中的 BYTE *的主要内容,如果未能解决你的问题,请参考以下文章

OpenCV 访问 MAT 对象中的 RGB 值

将 Mat 对象中的图像转换为 Android 中的浮点数组

如何将rgb 模式转换成 yuv 模式

如何将 RGB32 格式的 QImage 转换为 OpenCV::mat?

使用 OpenCV 将 RGB 图像转换为二进制图像

将 realsesense RGB-D 图像从统一传递到 C++