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,我們一般不去管它。
