彩色图像转灰度图像
2009-10-17 09:22
260 查看
09:34:57 2009-10-17
注意:我们并不是把真彩图像真正转为8位灰度图像,而是将其r、g、b值转为相等的对应灰度值,看起来就是灰度图像了,
先要在相应的头文件中定义一个宏
#define RGB2GRAY(r,g,b) (((b)*117 + (g)*601 + (r)*306) >> 10)
下面是稍作改进的代码,避免了多次调用系统定义的宏命令
注意:我们并不是把真彩图像真正转为8位灰度图像,而是将其r、g、b值转为相等的对应灰度值,看起来就是灰度图像了,
先要在相应的头文件中定义一个宏
#define RGB2GRAY(r,g,b) (((b)*117 + (g)*601 + (r)*306) >> 10)
void CDIPDoc::OnGrayscale() { if (!image) return; if(image->GetBPP()< 24) { CString strMessage; strMessage = "只支持真彩图!"; AfxMessageBox(strMessage); return; } for(int y=0;y<image->GetHeight();y++)//遍历图像 { for(int x=0;x<image->GetWidth();x++) { // COLORREF是windows中定义的用于存放颜色值的32位变量类型, // 低8位为红色值,再上面是8位绿色值和8位蓝色值,最高8位保留(可用于表示透明度) // RGB是windows已定义的宏,用于将r、g、b值组合为COLORREF量 // 我们并不是把真彩图像真正转为8位灰度图像, // 而是将其r、g、b值转为相等的对应灰度值,看起来就是灰度图像了 COLORREF rgb = image->GetPixel(x,y);// GetPixel用于取坐标为(x,y)的像素的rgb值; // RGB2GRAY为我们之前定义的宏 // GetRValue,GetGValue和GetBValue为windows已定义的宏,分别用于从COLORREF变量中取红、绿、蓝值 BYTE gray = RGB2GRAY(GetRValue(rgb),GetGValue(rgb),GetBValue(rgb)); rgb = RGB(gray,gray,gray);//r,g,b值相等时没有颜色(即灰色) image->SetPixel(x,y,rgb);//设置像素值 } } CString strMessage; strMessage = "处理成功!"; AfxMessageBox(strMessage); UpdateAllViews(NULL,NULL); }
下面是稍作改进的代码,避免了多次调用系统定义的宏命令
void CDIPDoc::OnGrayscale() { if (!image) return; if(image->GetBPP()< 24) { CString strMessage; strMessage = "只支持真彩图!"; AfxMessageBox(strMessage); return; } for(int y=0;y<image->GetHeight();y++)//遍历图像 { for(int x=0;x<image->GetWidth();x++) { // GetPixelAddress为取当前像素地址 BYTE *pixel = (BYTE*)image->GetPixelAddress(i,j); // 取当前像素r、g、b值,注意顺序 BYTE blue = *pixel++; BYTE green = *pixel++; BYTE red = *pixel; // 转为灰度 BYTE gray = RGB2GRAY(red,green,blue); // 设置新的r、g、b值 *pixel = gray; pixel--; *pixel = gray; pixel--; *pixel = gray; } } CString strMessage; strMessage = "处理成功!"; AfxMessageBox(strMessage); UpdateAllViews(NULL,NULL); }
相关文章推荐
- 图形图像处理-之-彩色转化到灰度的速度优化
- cvKMeans2均值聚类分析+代码解析+灰度彩色图像聚类
- 灰度图像转化为伪彩色图像
- MATLAB图像在HSV空间图像&彩色图像转化为灰度图像
- 【Java Opencv系列】5.1彩色图像转灰度
- opencv学习(一)实现将彩色图像转换成灰度图像和二值图像
- Matlab 彩色图像转化成灰度视频的花屏问题
- 彩色图像->灰度图像:
- C#实现彩色图像灰度处理
- OpenCV应用笔记】(彩色/灰度)图像像素值读取并保存到txt文件
- 双边滤波器在灰度和彩色图像处理中的应用
- 双端滤波器应用于灰度和彩色图像Bilateral Filtering for Gray and Color Images
- 彩色图像、灰度图像、二值图像和索引图像区别?
- 彩色图像的曲线灰度变化(伽马变换)
- 【OpenCV应用笔记】(彩色/灰度)图像像素值读取并保存到txt文件
- MATLAB学习笔记 将彩色的图像转化为灰度图像
- 彩色图像转灰度图像
- Java图像处理技巧四则-剪切,缩放,灰度变换,彩色变换
- 用计算机的随机数做成的图像(灰度和彩色
- 彩色图像、灰度图像、二值图像