// RRRGGGBBB->RGBRGBRGB
u8 *rgb = new u8[yuv2rgb_mem.size];
int index = 0;
int h = yuv_info.yuv_cap->height;
int w = yuv_info.yuv_cap->width;
for (int i = 0; i < h; i++)
{
for (int j = 0; j < w; j++)
{
rgb[index] = yuv2rgb_mem.virt[w * i + j];//b
rgb[index + 1] = yuv2rgb_mem.virt[w * h + w * i + j]; //g
rgb[index + 2] = yuv2rgb_mem.virt[w * h * 2 + w * i + j]; //r
index += 3;
}
}
// 保存文件
const char *file_name = "rgb.rgb";
FILE *fp = fopen(file_name, "wb");
if (fp == NULL)
{
WsLogUtil::log2("rgb.bin fopen failed");
}
WsLogUtil::log("yuv2rgb_mem.size %lu", yuv2rgb_mem.size);
size_t num = fwrite(rgb, 1, yuv2rgb_mem.size, fp);
// size_t num = fwrite(yuv2rgb_mem.virt, 1, yuv2rgb_mem.size, fp);
if (num == yuv2rgb_mem.size)
{
WsLogUtil::log("file saved success, %s", file_name);
}
else
{
WsLogUtil::log("file saved failed, %s", file_name);
}
delete[] rgb;
fclose(fp);
int h = yuv_info.yuv_cap->height;
int w = yuv_info.yuv_cap->width;
cv::Mat bgrImg(h, w, CV_8UC3);
for(int row = 0; row <h ;row++)
{
Vec<uint8_t,3> *data_ptr = bgrImg.ptr<Vec<uint8_t,3>>(row);
for(int col=0; col < w;col++)
{
data_ptr[col][0] = yuv2rgb_mem.virt[w*h*2 + w*row+ col]; //b
data_ptr[col][1] = yuv2rgb_mem.virt[w*h + w*row+ col]; //g
data_ptr[col][2] = yuv2rgb_mem.virt[w*row+ col]; //r
}
}