读书人

急一个视频颜色转黑白色的有关问题

发布时间: 2012-08-10 12:19:33 作者: rapoo

急。。。一个视频颜色转黑白色的问题,在线等。
最近在做一个directshow的filter,把RGB视频流变成黑白的 .
在这里http://blog.csdn.net/mengaim_cn/article/details/241449
找到了方法,但是有个地方我不懂。想请教一下。。。
下面这段代码,谁知道是什么意思吗?

//m_Width=m_VihIn.bmiHeader.biWidth;
//m_Height=m_VihIn.bmiHeader.biHeight;
//m_bytePerLine=(24*m_Width+31)/32*4;

BYTE rColor,gColor,bColor,changeColor;
for (int i=0;i<m_Height;i++)
{
for (int j=0;j<m_Width;j++)
{
rColor=*(pbInput+(m_Height-i-1)*m_bytePerLine+j*3);
gColor=*(pbInput+(m_Height-i-1)*m_bytePerLine+j*3+1);
bColor=*(pbInput+(m_Height-i-1)*m_bytePerLine+j*3+2);

changeColor=(rColor+gColor+bColor)/3;

*(pbOutput+(m_Height-i-1)*m_bytePerLine+j*3)=changeColor;
*(pbOutput+(m_Height-i-1)*m_bytePerLine+j*3+1)=changeColor;
*(pbOutput+(m_Height-i-1)*m_bytePerLine+j*3+2)=changeColor;
}
}

这句*(pbInput+(m_Height-i-1)*m_bytePerLine+j*3)是用什么公式的吗?



[解决办法]
1、R/G/B的值都为changeColor=(rColor+gColor+bColor)/3的话,该像素就是灰度的;
2、*3的意思是每个像素点都是3个字节,所以*3才能找到相应像素点的内存起始地址。
[解决办法]

探讨
引用:
引用:
那我该如何让颜色变成黑白色呢?除了用changeColor=(rColor+gColor+bColor)/3;
换句话说用什么方法比较好?太谢谢你的热心回复了。。

很简单 你算好这个changeColor之后

C/C++ code


if(changeColor>threshold)
rColor =gColor=bCol……

[解决办法]
Gray = R*0.299 + G*0.587 + B*0.114
[解决办法]
因为24位真彩色的图像,就是每个像素3个字节,分别是红绿蓝,然后一行一行地连续存储啊,相当于整个图像是一个二维数组。
彩色换成黑白,当然最简单的就是颜色值相加除3,相当于求一个数值上的亮度。然而,人眼对红、绿、蓝的敏感度不一样,所以最好像10楼说的那样,使用不等的权重。
楼主需要了解一些计算机图形学的知识,至少要知道颜色合成的原理。

读书人网 >C++

热点推荐