首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2012-08-10 
急。。。一个视频颜色转黑白色的问题,在线等。最近在做一个directshow的filter,把RGB视频流变成黑白的 .在这里

急。。。一个视频颜色转黑白色的问题,在线等。
最近在做一个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楼说的那样,使用不等的权重。
楼主需要了解一些计算机图形学的知识,至少要知道颜色合成的原理。

热点排行