将 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 *的主要内容,如果未能解决你的问题,请参考以下文章
将 Mat 对象中的图像转换为 Android 中的浮点数组