视频图像数据处理六:分离rgb24视频图像的r、g、b分量


本文介绍了分离rgb24视频图像的r、g、b分量的方法,附有详细的代码和图像示例。文中rgb24文件需要使用yuv/rgb播放器才能查看,参考播放器可选择雷神推荐的修改了一个YUV/RGB播放器,或者小编使用的vooya播放器

rgb24存储方式

与YUV420P三个分量分开存储不同,RGB24格式的每个像素的三个分量是连续存储的。一帧宽高分别为w、h的RGB24图像一共占用wh3 Byte的存储空间。RGB24格式规定首先存储第一个像素的R、G、B,然后存储第二个像素的R、G、B…以此类推。类似于YUV420P的存储方式称为Planar方式,而类似于RGB24的存储方式称为Packed方式。

函数代码

int CTransPic::simplest_rgb24_split(char*url, int w, int h, int num)
{
	ifstream ifile;
	ifile.open(url, ios::in | ios::binary);
	ofstream ofile1, ofile2, ofile3;
	ofile1.open("G:\\ffmpeg\\YUV\\output_r.y", ios::out | ios::binary);
	ofile2.open("G:\\ffmpeg\\YUV\\output_g.y", ios::out | ios::binary);
	ofile3.open("G:\\ffmpeg\\YUV\\output_b.y", ios::out | ios::binary);

	unsigned char* pic = (unsigned char*)malloc(w*h * 3);
	memset(pic, 0, w*h * 3);
	for (int i = 0; i < num; i++)
	{
		ifile.read((char*)pic, w*h * 3);
		for (int j = 0; j < w*h * 3; j += 3)
		{
#if simplest_rgb24_split_ctrol_method_1
			ofile1 << pic[j];
			ofile2 << pic[j + 1];
			ofile3 << pic[j + 2];
#else
			ofile1.write((const char*)(pic + j), 1);
			ofile2.write((const char*)(pic + j + 1), 1);
			ofile3.write((const char*)(pic + j + 2), 1);
#endif
		}
	}
	free(pic);
	ifile.close();
	ofile1.close();
	ofile2.close();
	ofile3.close();

	return 0;
}

上面代码中提供了两种将r、g、b分量分别写入文件的方式,通过宏开关simplest_rgb24_split_ctrol_method_1来控制具体使用哪种方式。函数调用方式如下所示。

TranPic.simplest_rgb24_split("..\\2_1000x667.rgb", 1000, 667, 1);

测试用例

程序测试用的原图如下所示:
2_1000x667_rgb

2_1000x667.rgb

程序测试输出结果如下图所示。其中,r、g、b分量通过播放器的y通道进行查看。
2_1000x667_r

2_1000x667_r.y

2_1000x667_g

2_1000x667_g.y

2_1000x667_b

2_1000x667_b.y

下载

vooya播放器:https://download.csdn.net/download/whegqing/11519824
测试用例图:https://download.csdn.net/download/whegqing/11520875


版本声明:本文参考了雷神的文章,文中代码重新做了编写,亲测可用,欢迎转载交流。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

i胡说

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值