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

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

很抱歉把它放在这里,但是 opencv 站点已关闭或者我无法访问那里的主题。我正在 Mat 中读取 RGB 图像 并尝试使用以下函数将其转换为 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;
}

最佳答案

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

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

关于c++ - 将Mat中的RGB图像转换为MFC中的BYTE *,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27538003/

相关文章:

c++ - 组合两个不同类型的 std::lists:可能吗?

visual-studio-2010 - WiX - 尝试使用 util :PermissionEx and getting an Error 1 设置服务的权限

python - 如何在 OpenCV Python 中检测红色?

c++ - 打印垫 float

c++ - printf - 奇怪的类型混搭结果。有人可以解释一下吗?

c++ - 在 std::map 中查找不存在的键

visual-studio-2010 - Visual Studio 2010 在启动时崩溃,即使在安全模式下

android - 如何将 mat 转换为位图以及将位图转换为 mat?

c++ - c++ static_cast 的必要性是什么

c# - 很难让 Visual Studio 2010 附加到远程进程