当前位置:   article > 正文

图像灰度化的三种方法(matlab、C++、Python实现)_去除图像的灰色算法

去除图像的灰色算法

灰度化处理就是将一幅色彩图像转化为灰度图像的过程。彩色图像分为R,G,B三个分量,分别显示出红绿蓝等各种颜色,灰度化就是使彩色的R,G,B分量相等的过程。灰度值大的像素点比较亮(像素值最大为255,为白色),反之比较暗(像素最下为0,为黑色)。

    图像灰度化的算法主要有以下3种:

     (1)最大值法:使转化后的R,G,B得值等于转化前3个值中最大的一个,即:

                     R=G=B=max(R,G,B)                    (1)

这种方法转换的灰度图亮度很高。

      (2)平均值法:是转化后R,G,B的值为转化前R,G,B的平均值。即:

                     R=G=B=(R+G+B)/3                                (2)

这种方法产生的灰度图像比较柔和。

      (3)加权平均值法:按照一定权值,对R,G,B的值加权平均,即:

                                           (3)

分别为R,G,B的权值,取不同的值形成不同的灰度图像。由于人眼对绿色最为敏感,红色次之,对蓝色的敏感性最低,因此使将得到较易识别的灰度图像。一般时,得到的灰度图像效果最好。



一、matlab代码实现:

  1. %%三种方法实现灰度化与调用MATLAB函数实现灰度化
  2. close all;
  3. clear all;
  4. Img=imread('11.jpg');
  5. [n m a]=size(Img);%判断图像的大小
  6. GrayImage= rgb2gray(Img);%调用MATLAB函数实现灰度化
  7. Img_Gray=zeros(n,m);
  8. for x=1:n%通过双循环对图像进行灰度化处理
  9.     for y=1:m
  10.      %  Img_Gray(x,y)=max(Img(x,y,1),max(Img(x,y,2),Img(x,y,3)));  %第一种方法实现灰度化
  11.      %   Img_Gray(x,y)=(Img(x,y,1)+Img(x,y,2)+Img(x,y,3))/3;%第二种方法实现灰度化
  12.         Img_Gray(x,y)=0.3*Img(x,y,1)+0.59*Img(x,y,2)+0.11*Img(x,y,3);%第三种方法实现灰度化
  13.     end
  14. end
  15. figure,imshow(Img);title('原图像')
  16. figure,imshow(GrayImage);title('调用系统函数实现灰度化')
  17. figure,imshow(uint8(Img_Gray));title('第三种方法')


效果图:

                                                 

                                        原图                             调用matlab函数                            第三种方法

二、vc+opencv实现:

  1. #include "stdafx.h"
  2. #include "highgui.h"
  3. #include "cv.h"
  4. #include
  5. #include
  6.  
  7. int _tmain(int argc, _TCHAR* argv[])
  8. {
  9.     IplImage    *Image;                        //定义相应的图像指针  
  10.     IplImage    *Image_r;                        //从1~5代表5中不同权值的结果  
  11.     IplImage    *Image_g;  
  12.     IplImage    *Image_b;
  13.     IplImage    *GrayImage;
  14.     IplImage    *Gray_Image;
  15.  
  16.     Image = cvLoadImage( "11.jpg", -1 );    //读取图片  
  17.     if (Image == NULL)  
  18.     return -1;   
  19.   
  20.     Image_r = cvCreateImage(cvGetSize(Image),8,1);  
  21.     Image_g = cvCreateImage(cvGetSize(Image),8,1);  
  22.     Image_b = cvCreateImage(cvGetSize(Image),8,1);
  23.     GrayImage = cvCreateImage(cvGetSize(Image),8,1);
  24.     Gray_Image = cvCreateImage(cvGetSize(Image),8,1);
  25.     CvMat* pMat_r = NULL;         //定义与图像关联的数据指针  
  26.     CvMat* pMat_g = NULL;  
  27.     CvMat* pMat_b = NULL;  
  28.     CvMat* pGrayMat = NULL;
  29.     pMat_r = cvCreateMat(Image->height, Image->width, CV_32FC1);  
  30.     pMat_g  = cvCreateMat(Image->height, Image->width, CV_32FC1);  
  31.     pMat_b  = cvCreateMat(Image->height, Image->width, CV_32FC1); 
  32.     pGrayMat= cvCreateMat(Image->height, Image->width, CV_32FC1);
  33.     BYTE r;       //中间过程变量  
  34.     BYTE g;  
  35.     BYTE b;
  36.     BYTE Gray;  
  37.  
  38.     for(int j=0; jheight; j++)  
  39.     {  
  40.          for(int i=0; iwidth; i++)  
  41.         {             
  42.           b = (BYTE)Image->imageData[j*Image->widthStep + i*3];     //B分量  
  43.           g = (BYTE)Image->imageData[j*Image->widthStep + i*3 + 1]; //G分量  
  44.           r = (BYTE)Image->imageData[j*Image->widthStep + i*3 + 2]; //R分量  
  45.  //       Gray = max(g, max(b,r));    //第一种方法 
  46.  //        Gray  = (BYTE)((r + g + b)/3); //第二种方法 
  47.             Gray  = (BYTE)(0.11*b + 0.59*g + 0.30*r);//第三种方法  
  48.           cvmSet(pGrayMat, j, i, Gray); 
  49.   }  
  50.      } 
  51.       cvCvtColor(Image,Gray_Image,CV_BGR2GRAY); //调用opencv函数实现灰度化
  52.       cvConvert(pGrayMat, GrayImage);  
  53.       cvNamedWindow( "Image",CV_WINDOW_AUTOSIZE);  
  54.       cvNamedWindow( "GrayImage",CV_WINDOW_AUTOSIZE);
  55.       cvNamedWindow( "Gray_Image",CV_WINDOW_AUTOSIZE); 
  56.       cvShowImage("Image", Image);  
  57.       cvShowImage("GrayImage", GrayImage);  
  58.       cvShowImage("Gray_Image", GrayImage);
  59.       cvWaitKey(0);  
  60.       cvDestroyWindow("Image");   
  61.       cvDestroyWindow("GrayImage"); 
  62.       cvDestroyWindow("Gray_Image");
  63.       cvReleaseImage(&Image);  
  64.       cvReleaseImage(&GrayImage); 
  65.       cvReleaseImage(&Gray_Image);
  66.       cvReleaseMat(&pGrayMat);  
  67.       return 0;
  68. }


效果图:

 

                   
                                         原图                       直接调用opencv函数                 第三种方法实现


三、python+opencv代码实现:

  1. import cv2  
  2.  
  3. img = cv2.imread("11.jpg")  
  4. GrayImage=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) 
  5. cv2.imshow("Image", img)
  6. cv2.imshow("grayImage", GrayImage) 
  7. cv2.waitKey (0)  
  8. cv2.destroyAllWindows()
  9. #第一种方法
  10. import cv2.cv as cv
  11. image = cv.LoadImage('11.jpg')
  12. grayimg= cv.CreateImage(cv.GetSize(image), image.depth, 1)
  13. for i in range(image.height):
  14.     for j in range(image.width):
  15.         grayimg[i,j] = max(image[i,j][0], image[i,j][1], image[i,j][2])
  16. cv.ShowImage('srcImage', image)        
  17. cv.ShowImage('grayImage', grayimg)
  18. cv.WaitKey(0)
  19. #第二种方法
  20. import cv2.cv as cv
  21. image = cv.LoadImage('11.jpg')
  22. grayimg = cv.CreateImage(cv.GetSize(image), image.depth, 1)
  23. for i in range(image.height):
  24.     for j in range(image.width):
  25.         grayimg[i,j] = (image[i,j][0] + image[i,j][1] + image[i,j][2])/3
  26. cv.ShowImage('srcImage', image)
  27. cv.ShowImage('grayImage', grayimg)
  28. cv.WaitKey(0)
  29. #第三种方法
  30. import cv2.cv as cv
  31. image = cv.LoadImage('11.jpg')
  32. grayimg = cv.CreateImage(cv.GetSize(image), image.depth, 1)
  33. for i in range(image.height):
  34.     for j in range(image.width):
  35.         grayimg[i,j] = 0.3 * image[i,j][0] + 0.59 * image[i,j][1] +  0.11 * image[i,j][2]
  36. cv.ShowImage('srcImage', image)           
  37. cv.ShowImage('grayImage', grayimg)
  38. cv.WaitKey(0)

效果图: 


             

                                       原图                                            直接调用函数                                第三种方法
 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/596347
推荐阅读
相关标签
  

闽ICP备14008679号