【发布时间】:2013-02-22 21:05:37
【问题描述】:
我正在尝试使用保存 32 位 ARGB 帧的相机缓冲区来初始化 Mat。这些是我到目前为止所采取的步骤:
cv::Mat src = cv::Mat(cv::Size(img_height, img_width),CV_8UC4);
memcpy(src.ptr(), (void*) img_buffer,img_height * img_width * 4);
cv::Mat dest= src.clone();
cv::cvtColor(src,dest,COLOR_BGRA2BGR);
这会导致段错误。即使 dest 被初始化为仍然会发生
cv::Mat dest=cv::Mat(src.size(),src.type());
不胜感激。
更新
所以我正在尝试手动解开订单,如下所示:
int rgb_temp[4];
for(int y=0; y < (int)img_height; y++) {
for(int x=0; x < (int)img_width; x++) {
rgb_temp[0] = (unsigned int)img_buffer[(int)img_stride * y + x + 0]; // A
rgb_temp[1] = (unsigned int)img_buffer[(int)img_stride * y + x + 1]; // R
rgb_temp[2] = (unsigned int)img_buffer[(int)img_stride * y + x + 2]; // G
rgb_temp[3] = (unsigned int)img_buffer[(int)img_stride * y + x + 3]; // B
src.data[ (y + x) + 0] = rgb_temp[3]; // B
src.data[ (y + x) + 1] = rgb_temp[2]; // G
src.data[ (y + x) + 2] = rgb_temp[1]; // R
src.data[ (y + x) + 3] = rgb_temp[0]; // A
}
}
但无济于事。我能够从 img_buffer 读取 ARGB 值,但无法写入 src.data。这是正确的做法吗?
【问题讨论】: