RGB转换为灰度vc代码
2012-12-21 10:34
190 查看
vc图像处理中经常要进行颜色空间的转换,因为摄像头采集的图像格式通常是RGB24或RGB32的,而大多数算法通常是适用于灰度图的,如人脸检测,边缘提取等,因此需要进行RGB到灰度图的转换。
下面是转换为灰度图的vc函数代码,注意通常RGB图像存放顺序是BGR格式的:
程序代码
BOOL RGBToGray(BYTE *pData,int iWidth,int iHeight,int iDepth)
{
BYTE red,green,blue;
BYTE grey;
if(iDepth != 3 && iDepth != 4)
{
return FALSE;
}
for(int j=0;j < iHeight;j++)
{
for(int i=0;i < iWidth;i++)
{
blue = *(pData + j*iWidth*iDepth+i*iDepth);
green = *(pData + j*iWidth*iDepth+i*iDepth + 1);
red = *(pData + j*iWidth*iDepth+i*iDepth + 2);
grey = (BYTE)((float)(red*0.299+green*0.587+blue*0.114));
*(pData + j*iWidth*iDepth+i*iDepth) = grey;
*(pData + j*iWidth*iDepth+i*iDepth + 1) = grey;
*(pData + j*iWidth*iDepth+i*iDepth + 2) = grey;
}
}
return TRUE;
}
下面是转换为灰度图的vc函数代码,注意通常RGB图像存放顺序是BGR格式的:
程序代码
BOOL RGBToGray(BYTE *pData,int iWidth,int iHeight,int iDepth)
{
BYTE red,green,blue;
BYTE grey;
if(iDepth != 3 && iDepth != 4)
{
return FALSE;
}
for(int j=0;j < iHeight;j++)
{
for(int i=0;i < iWidth;i++)
{
blue = *(pData + j*iWidth*iDepth+i*iDepth);
green = *(pData + j*iWidth*iDepth+i*iDepth + 1);
red = *(pData + j*iWidth*iDepth+i*iDepth + 2);
grey = (BYTE)((float)(red*0.299+green*0.587+blue*0.114));
*(pData + j*iWidth*iDepth+i*iDepth) = grey;
*(pData + j*iWidth*iDepth+i*iDepth + 1) = grey;
*(pData + j*iWidth*iDepth+i*iDepth + 2) = grey;
}
}
return TRUE;
}
相关文章推荐
- RGB转换为灰度vc代码
- ffmpeg系列:使用C++类封装ffmpeg,封装视频帧缩放转换rgb功能ToRGB()方法
- 从16进制颜色值转换到RGB值(cocos2d-iphone版)
- 将RGB颜色转换成16bit颜色
- RGB颜色值在线转换工具
- 浅析RGB 及RGB转换为ARGB
- RGB与Lab色彩空间相互转换c++代码
- YUV420转换成RGB
- 十六进制与RGB颜色值的相互转换 , 判断一个素数 , 内联函数, 面向对象
- RGB与YCbCr颜色空间的转换
- Javascript实现颜色rgb与16进制转换的方法
- 颜色空间系列2: RGB和CIELAB颜色空间的转换及优化算法
- 图像处理--RGB到HSI的彩色转换--图像分割(MFC VC++)
- 使用ffmpeg进行图像格式转换以及图像缩放/sws_scale/linux/c++/c/rgb-yuv420
- 视频教程:YUV和RGB相互转换--MATLAB实现(一)
- VC编程实现色彩空间RGB与XYZ相互转换
- YUV转换成RGB需要注意的问题 Matlab/C++
- RGB和HSB的转换推算
- RGB和YUV的转换公式
- 基于OpenCV的RGB和HSV色彩空间相互转换C++程序