如何将BMP位图转换成YUV分量格式图(200分)

  • 主题发起人 主题发起人 tg
  • 开始时间 开始时间
T

tg

Unregistered / Unconfirmed
GUEST, unregistred user!
我正在搞一个多媒体软件,其中要将视频采集卡采集到的(PAL制式)图象输出到指定位置,
该采集卡提供的ActiveX接口具备把YUV颜色分量文件(*.YUV)直接叠加到指定显示区的功能.
现在,问题是,如何在自己的程序里把BMP位图,直接转换成YUV格式.
有那位图象高手指点,将以高分相送!
或者指出有关这方面资料、网址也行。

(附注:该采集卡提供一个DOS版本的小执行文件能在DOS环境下实现上述功能,可惜没有
源代码以及响应的技术资料。我给怎么办?)
 
RGB转YUV的公式好像不是固定的,不同公式精度不同。提供两个做为参考:
1、Y=0.3R+0.59G+0.11B
U=(B-Y)*0.493
V=(R-Y)*0.877
2、Y=0.299R+0.587G+0.114B
U=-0.148R-0.289G+0.437B
V=0.615R-0.515G-0.100B
 
C source code:
*******RGB->YUV**********
//y = 0.299*r + 0.587*g + 0.114*b;
//v = (r - y)*127/179;
//u = (b - y)*127/226;
y = ((r*313524)>>20) + ((g*615514)>>20) + ((b*119538)>>20);
v = ((r - y)*743962)>>20;
u = ((b - y)*589244)>>20;

********YUV->RGB*******
r = v+y;
b = u+y;
//g = 1.706*y-0.509*r-0.194*b;
g = ((y*1788871)>>20) - ((r*533725)>>20) - ((b*203424)>>20);
 
一个菜鸟级别的问题:
BMP文件格式已经很清楚了,请问YUV的格式是怎样的(YUV分量以怎样的格式存储在其中),
有没有文件头定义啊?
---是逐点扫描BMP图片转换操作吗 :).. .
 
是逐个点扫描转换.没有文件头.
不过,一般要取决于是采用YUV的4:1:1还是4:2:2格式.
对于4:1:1的格式,每四个点算出对应的四个Y,然后把U的4个值平均,
V的同样,就可以了.
 
douh提供的RGB转YUV的公式:
Y=0.299R+0.587G+0.114B
U=-0.148R-0.289G+0.437B
V=0.615R-0.515G-0.100B
是比较经典的公式。
其中,Y为亮度,U、V表示色差。在彩色电视PAL制式中使用YUV模型,U、V构成彩色的
两个分量。
你只须用Bitmap的ScanLine或Pixels[x,y](x行y列像素)取得R、G、B分量即可。注意:
Pixels[x,y]的组成是按B、G、R各一个字节(8位)组织的。

 
你们有关于小波变换的电子书吗?
email:wolfmaster@myrice.com
thanks
 
提问者:
如果你还要继续讨论请定期提前你的帖子,如果不想继续讨论请结束帖子。
请认真阅读大富翁论坛规则说明 http://www.delphibbs.com/delphibbs/rules.asp
 
同维有一个程序叫BMP2YUV.exe
 
各位,用piexls的速度比较慢而scaneline是不是很快,其用法如何?
 
pixels的缺陷是M$自己都承认的,
scanline要快多了,用法见 Delphi 的Examples
 
转换公式 :

Y=[0.299 0.587 0.144]|R|
U=[-0.167 -0.331 0.5]|G|
v=[0.5 -0.419 -0.081]|B|
 
后退
顶部