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

通过directshow取到的图像做灰度处理解决办法

2012-02-22 
通过directshow取到的图像做灰度处理我从摄像头取到了RGB565的16位的位图用如下程序做了灰度处理后生成的b

通过directshow取到的图像做灰度处理
我从摄像头取到了RGB565的16位的位图用如下程序做了灰度处理后生成的bmp图,为什么是1半的并且是绿色的呢? 


  for ( h = 0; h < height; h++) { 

  for ( w = 0; w < width; w++) { 

  pixel = *dataAddress; 

  dataAddress++; 
  pixelR = (u8_t)((pixel&0xF800)>>11);//5 bits 
  pixelG = (u8_t)((pixel&0x07E0)>>5);//6 bits 
  pixelB = (u8_t)(pixel&0x001F);//5 bits 
  pixel256 = (u8_t)((pixelR * 299 + pixelG * 587 + pixelB * 114) / 1000); 

  *(img256 + h*width + w) = pixel256; 
  } 
  } 

生成的图片下半部分是绿色的图,上半部分有时是全黑的,有时是和下半部分一样绿色图。 


[解决办法]
那你只能检查一下你的灰度处理计算方法是不是正确的了。
[解决办法]
pixel256 = (u8_t)((pixelR * 299 + pixelG * 587 + pixelB * 114) / 1000); 
你这个是算的什么分量
[解决办法]
pixel256 = (u8_t)((pixelR * 299 + pixelG * 587 + pixelB * 114) / 1000); 
这句明显有问题,0<pixel256<64,应该是【0,255】才对,你试下pixel256*=255/64
[解决办法]
pixelG有6位最大64,其它两个最大32,把它们换成pixelG
((pixelR * 299 + pixelG * 587 + pixelB * 114) / 1000)变为
pixelG*(( 299 + 587 + 114) / 1000)
这个值怎么可能大于64

热点排行