圖像灰度化


1彩色圖,灰度圖,單色圖

灰度圖是指只含亮度信息,不含色彩信息的圖像。灰度化處理是把含有亮度和色彩的彩色圖像變化成灰度圖像的過程。 圖像灰度化處理一般采用以下三種算法: 平均值法: f(i,j)=(R(i,j)+G(i,j)+B(i,j))/3 最大值法: f(i,j)=max(R(i,j),G(i,j),B(i,j)) 加權平均值法:f(i,j)=0.30R(i,j)+0.59G(i,j)+0.11B(i,j)

2 圖像灰度化opencv

 1 #include <opencv2/opencv.hpp>
 2 #include <opencv2/highgui/highgui.hpp>
 3 #include <opencv2/imgproc/imgproc.hpp>    
 4 
 5 using namespace cv;
 6 
 7 int main()
 8 {
 9     //讀取圖片(使用圖片的絕對路徑)
10     Mat src = imread("D://a3.png");//mat是matrix的縮寫,表示src的數據類型是矩陣類型的 
11     //顯示圖片
12     imshow("原圖", src);
13 
14     //顯示灰度圖
15     Mat Gray;
16     cvtColor(src, Gray, COLOR_BGR2GRAY);//注釋一
17     imshow("灰度圖", Gray);
18 
19     
20 
21     //進行均值濾波
22     Mat dstImage1;
23     blur(src, dstImage1, Size(7, 7));//注釋二
24 
25     //模糊操作顯示效果圖
26     imshow("均值濾波【效果圖】", dstImage1);
27 
28     //不加此語句圖片會一閃而過
29     waitKey(0);
30 
31     return 0;
32 }

 

 

 

注釋一:

 

. InputArray src: 輸入圖像即要進行顏色空間變換的原圖像,可以是Mat類
. OutputArray dst: 輸出圖像即進行顏色空間變換后存儲圖像,也可以Mat類
. int code: 轉換的代碼或標識,即在此確定將什么制式的圖片轉換成什么制式的圖片
. int dstCn = 0: 目標圖像通道數,如果取值為0,則由src和code決定
cvtColor(srcImage, grayImage, CV_BGR2GRAY); //將圖像轉換為灰度圖

cvtColor(srcImage, HSVImage, COLOR_BGR2HSV); //將圖像轉換為HSV圖

注釋二:

blur的作用是對輸入的圖像src進行均值濾波后用dst輸出。

函數原型:
C++: void blur(InputArray src, OutputArray dst, Size ksize, Point anchor=Point(-1,-1), int borderType=BORDER_DEFAULT )

參數詳解如下:
第一個參數,InputArray類型的src,輸入圖像,即源圖像,填Mat類的對象即可。該函數對通道是獨立處理的,且可以處理任意通道數的圖片,但需要注意,待處理的圖片深度應該為CV_8U, CV_16U, CV_16S, CV_32F 以及 CV_64F之一。
第二個參數,OutputArray類型的dst,即目標圖像,需要和源圖片有一樣的尺寸和類型。比如可以用Mat::Clone,以源圖片為模板,來初始化得到如假包換的目標圖。
第三個參數,Size類型(對Size類型稍后有講解)的ksize,內核的大小。一般這樣寫Size( w,h )來表示內核的大小( 其中,w 為像素寬度, h為像素高度)。Size(3,3)就表示3x3的核大小,Size(5,5)就表示5x5的核大小
第四個參數,Point類型的anchor,表示錨點(即被平滑的那個點),注意他有默認值Point(-1,-1)。如果這個點坐標是負值的話,就表示取核的中心為錨點,所以默認值Point(-1,-1)表示這個錨點在核的中心。
第五個參數,int類型的borderType,用於推斷圖像外部像素的某種邊界模式。有默認值BORDER_DEFAULT,我們一般不去管它。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM