Opencv——彩色图像灰度化的三种算法
2014-07-01 13:43
344 查看
为了加快处理速度在图像处理算法中,往往需要把彩色图像转换为灰度图像。24为彩色图像每个像素用3个字节表示,每个字节对应着RGB分量的亮度。
当RGB分量值不同时,表现为彩色图像;当RGB分量相同时,变现为灰度图像:
一般来说,转换公式有3中。
(1)Gray(i,j)=[R(i,j)+G(i,j)+B(i,j)]/3;
(2)Gray(i,j)=0.299*R(i,j)+0.587*G(i,j)+0.144*B(i,j);
(3)Gray(i,j)=G(i,j);//从2可以看出G的分量比较大所以可以直接用它代替
下面是代码:
原图片:
![](http://images.cnitblog.com/i/620754/201407/011332428093618.png)
算法1生成的灰度图:
![](http://images.cnitblog.com/i/620754/201407/011336137621933.png)
算法2生成的灰度图:
![](http://images.cnitblog.com/i/620754/201407/011338480276761.png)
算法3生成的灰度图:
当RGB分量值不同时,表现为彩色图像;当RGB分量相同时,变现为灰度图像:
一般来说,转换公式有3中。
(1)Gray(i,j)=[R(i,j)+G(i,j)+B(i,j)]/3;
(2)Gray(i,j)=0.299*R(i,j)+0.587*G(i,j)+0.144*B(i,j);
(3)Gray(i,j)=G(i,j);//从2可以看出G的分量比较大所以可以直接用它代替
下面是代码:
#include<cv.h> #include<highgui.h> using namespace cv; using namespace std; int main() { IplImage *img=cvLoadImage("D:\\Opencv\\Images\\lena.jpg"); IplImage* dest=cvCreateImage(cvGetSize(img),img->depth,1); cvNamedWindow("SourceImage"); cvNamedWindow("destinationImage"); uchar* data=(uchar*)img->imageData; int step = img->widthStep/sizeof(uchar); //step即为上图的widthstep int channels = img->nChannels; // 这个图片为3通道的 uchar b=0,g=0,r=0; for(int i=0;i<img->height;i++) for(int j=0;j<img->width;j++){ b=data[i*step+j*channels+0]; // 此时可以通过更改bgr的值达到访问效果。 g=data[i*step+j*channels+1]; r=data[i*step+j*channels+2]; // ((char*)(dest->imageData + j*dest->widthStep))[i] =(b+r+g)/3;//(1) //((char*)(dest->imageData + j*dest->widthStep))[i] =r*0.299+g*0.587+0.144*b;//(2) ((char*)(dest->imageData + j*dest->widthStep))[i] =g;//(3) } cvShowImage("SourceImage",img); cvShowImage("destinationImage",dest); cvWaitKey(); cvDestroyAllWindows(); cvReleaseImage(&img); cvReleaseImage(&dest); //i*step 当i=0 即为上图的第一行 为1就是第二行 //j*chanels+0 j*通道数当j=0为第一列的第0个通道->b //j*channels+1 当j=1为第二列的第1个通道->g }
原图片:
![](http://images.cnitblog.com/i/620754/201407/011332428093618.png)
算法1生成的灰度图:
![](http://images.cnitblog.com/i/620754/201407/011336137621933.png)
算法2生成的灰度图:
![](http://images.cnitblog.com/i/620754/201407/011338480276761.png)
算法3生成的灰度图:
![](http://images.cnitblog.com/i/620754/201407/011341198094631.png)
相关文章推荐
- opencv简单的彩色图像灰度化和二值化(学习笔记)
- 【图像处理之常用算法一】——彩色图像的灰度化
- 解析C#彩色图像灰度化算法的实现代码详解
- 用opencv来验证一篇彩色图像增强算法
- 解析C#彩色图像灰度化算法的实现代码详解
- 【图像算法】彩色图像分割专题八:基于MeanShift的彩色分割
- 【图像算法】彩色图像分割专题九:基于KCM的彩色分割
- 【图像算法】彩色图像分割专题一:颜色空间1(原理)
- 【图像算法】彩色图像分割专题一:颜色空间2(部分结果)
- OpenCV三种立体匹配求视差图算法总结
- 【OpenCV应用笔记】(彩色/灰度)图像像素值读取并保存到txt文件
- 【图像算法】彩色图像分割专题七:基于分水岭的彩色分割
- Opencv: 彩色图像转成灰度图像并保存
- 数字图像基础,论坛,算法库matlab,opencv,halcon
- opencv2.3读取kinect深度信息和彩色图像
- OpenCV将彩色图像转化为灰度图代码
- OpenCV三种立体匹配求视差图算法总结
- 彩色图像灰度化
- 【图像算法】彩色图像分割专题二:显示屏幕上任意点颜色值
- 彩色图像的灰度化处理