16位的YUY2值如何转换为24位的RGB值?

现在还是人类 2010-01-07 05:02:04
这段时间我在弄一个视频捕获程序,发现摄像头返回的数据是16位的YUY2数据,
在将色彩转换成RGB的时候遇到了问题,还忘搞过这一块的朋友能够给与解答。
16位的YUY2在二进制位里是怎么分的?
是不是?
Y0 U Y1 V
1111 1111 1111 1111
--------- ---------
Byte1 Byte2

还有怎么计算才能转换成24位的RGB色呢?

说明一下我的发现

Byte1我在RGB里用过,发现可能就是亮度
因为我这样试验过
R=Byte1
G=Byte1
B=Byte1
看到的效果是一个灰色的图片,没有色彩

所以我想是不是 U V 在 Byte2 里
U V
1111 1111
----------
Byte2

但是还是没有搞出彩色的图像,还忘大家能够给与解答
...全文
581 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
gtczr 2011-05-30
  • 打赏
  • 举报
回复
YVY2

第1字节 = Y0
第2字节 = U0
第3字节 = Y1
第4字节 = V0
第5字节 重新开始第一组数据。
pigyyf 2010-10-14
  • 打赏
  • 举报
回复
LZ明白了把解决方法分享一下啊~小弟最近遇到同样的困惑,望解答一下
舉杯邀明月 2010-01-09
  • 打赏
  • 举报
回复
弄明白了就好。恭喜楼主。
现在还是人类 2010-01-09
  • 打赏
  • 举报
回复
弄了好久,终于还是自己弄明白了,谢谢各位的回答
舉杯邀明月 2010-01-09
  • 打赏
  • 举报
回复
不清楚。



我觉得 10F 中:
cV = Byte2 \ 16

如果 YUY2 是一个 Integer类型 的值,应该:
cV = (YUY2 And 255) \ 16
Tiger_Zhao 2010-01-08
  • 打赏
  • 举报
回复
我5楼给的第2个链接有很清晰的图示。
RGB相同当然只能是黑-灰-白,不可能有彩色。
现在还是人类 2010-01-08
  • 打赏
  • 举报
回复
还有一个问题,就是我得到的数据应该是16位(即两个字节)表示一个像数的RGB值,
如果按你的说法,一个16位的YUY2表示两个像数的RGB值的话好像又不对,
因为我上面也提过,我将两个两个字节的数据,只取首个字节作为24位RGB的值的时候,
出现的是一个完整的灰度图像:
R=Byte1
G=Byte1
B=Byte1
没发现有色彩偏位的现象,那这又是怎么回事呢?
现在还是人类 2010-01-08
  • 打赏
  • 举报
回复
那么 Y0 U Y1 V 的取值是不是这样呢?
Y0 U Y1 V
1111 1111 1111 1111
--------- ---------
Byte1 Byte2
------------------------------------
还是这样?
Y0 Y1 U V
1111 1111 1111 1111
--------- ---------
Byte1 Byte2
Tiger_Zhao 2010-01-08
  • 打赏
  • 举报
回复
http://hi.baidu.com/chioyang/blog/item/de438a3ee2535bfb838b1367.html
http://www.rosoo.net/a/Media/AVPlay/200604/6050.html
Tiger_Zhao 2010-01-08
  • 打赏
  • 举报
回复
YUY2 是 422 编码格式(表示 32 字节中有4个Y分量、2个U分量和2个V分量)。
16个字节表示两个像素,这两个像素有独立的Y分量,但是共用相同的U分量和V分量。
即你提问中的 {Y0 U Y1 V} 表示成两组 {Y0 U V} 和 {Y1 U V},然后按照计算公式求得两个像素的 RGB。
dingyanwei 2010-01-08
  • 打赏
  • 举报
回复
不懂帮顶,希望lz研究能有突破。
现在还是人类 2010-01-08
  • 打赏
  • 举报
回复
帮顶顶呀,兄弟们
现在还是人类 2010-01-08
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 tiger_zhao 的回复:]
我5楼给的第2个链接有很清晰的图示。
RGB相同当然只能是黑-灰-白,不可能有彩色。
[/Quote]
这个我知道,我的意思是说 Byte1 应该就是亮度(即 Y),
如果是这样 Byte2 应该就是 U 和 V 了
但我取了 Byte2 的前4位和后4位作为 U 和 V 的值
但通过公式算出来的结果不对

cY = Byte1
cV = Int(Byte2 / (2 ^ 4))
cU = Byte2 And 15
R = Int(cY + cV * 1.14)
G = Int(cY - cU * 0.395 - cV * 0.581)
B = Int(cY + cU * 2.032)
东方之珠 2010-01-08
  • 打赏
  • 举报
回复
帮顶
现在还是人类 2010-01-07
  • 打赏
  • 举报
回复
网上的资料我也看过一些,但是真正处理起来,还是遇到很多问题
就比如说:Y0 U Y1 V
在16位数据里是怎么回事?Y0从何而来?U从何而来?...
还有,有些资料说 YUY2就是 YUV ,但是看起来好像又不是。
而且就 4位 4位 的分开来计算,出来的RGB值也不对。
还要网上的那些好像是说明32位的信息,而我要处理的是16位的。
lyserver 2010-01-07
  • 打赏
  • 举报
回复
网上有相关的转换代码啊,比如:YUY2/RGB转换公式
king06 2010-01-07
  • 打赏
  • 举报
回复
不懂,帮顶~

809

社区成员

发帖
与我相关
我的任务
社区描述
VB 多媒体
社区管理员
  • 多媒体
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧