为什么写这个?
1,百度上看了很多人的回答,好多人列个公式,就完了。
2,也看了一些博客,好多人的代码逻辑清晰,但是自己运行发现RGB转到YUV,YUV转到RGB色彩不对,不是偏色,是不对。
3,然后自己写了一个,发现还是偏色,好在研究了两个小时找到哪里的问题了。目前RGB转YUV(NV12, NV21 YUV420P, YUV444)都是正常的。可以用yuv viewer查看。NV21转RGB也正常了
RGB转YUV
1,读RGB文件,
2,公式
%RGB_to_YUV
% Y = 0.299.*R+ 0.587.*G + 0.114.*B;
% U = -0.147.*R - 0.289.*G + 0.436.B+128;
% V = 0.615.R - 0.515.G - 0.100.B+128;
%%%%%%%%%%%%%%
%nv12->RGB,存储为test1.jpg
% R = y + 1.140.(vv-128);
% G = y - 0.394.(uu-128) - 0.581.(vv-128);
% B = y + 2.032.(uu-128);
这两个公式一定要配套,可以带入固定RGB试一下
3.按照不同YUV格式,组合数据,存储;
原始图像
YUV转RGB
1,确定宽高信息,用fread读入图像数据
2,根据不同格式分离YUV数据
3, 填充UV数据
4,利用公式转换为RGB数据
5,cat连接
6,判断区间,
7,写数据fwrite
上边RGB转换的YUV图像,不知道上传YUV,用yuv浏览器截个图吧
资源在审核,上传链接需要时间,有需求的朋友可以留言邮箱