读书人

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

发布时间: 2012-02-22 19:36:56 作者: rapoo

通过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

读书人网 >C++

热点推荐