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

时间:2014-12-18 01:52:51

标签: c++ visual-studio-2010 opencv mfc mat

很抱歉把它放在这里,但opencv网站已关闭或我无法访问该主题。我正在RGB image中阅读Mat,而不是尝试使用以下函数转换为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 个答案:

答案 0 :(得分:0)

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

  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...
           }
        }
    }