陳 龍(蘇州大學計算機科學與技術學院 江蘇 蘇州 215000)
1.1、原始圖像的載入或者獲取:一般通過加載本地圖像、照相機獲取圖片、攝像頭獲取視頻數據、繪圖軟件創建圖像等方式實現。
1.2、圖像的加工處理:首先是對圖像的預處理過程,可以通過算法工具對圖像進行直方圖分析、幾何變換、空間變換、閥值化、傅里葉變換、邊緣檢測、圖像變換等方法處理原始圖像,增強圖像的顯示效果、修復受損圖像、實現圖像的位移、空間變換等[1]。
1.3、圖像處理應用:通過圖像的加工處理,提取關鍵信息,如圖像的頻域數據、邊緣分布,直方圖分布等信息,實現字符的匹配識別、人臉的匹配識別等,通過計算機進行數據集訓練,實現基于深度學習的圖像識別應用。
OpenCV首先是一個計算機視覺工具庫,可以跨平臺的在各大主流操作系統(如windows、MAC OS、Linux)上運行。OpenCV提供了豐富的語言接口,可以通過VC++、Python等語言開發程序實現圖像處理功能。與OpenCV類似的視覺庫有MATALAB。MATALAB擁有強大的線性代數處理能力,可以高效率的處理多維矩陣的圖像,但是由于其不是一個開源軟件,需要付費購買使用,所以更多應用于實驗室。更多的個人開發者利用免費開源的OpenCV來開發圖像處理程序。而程序語言平臺的選擇上,根據開發者語言背景、應用領域的不同,選擇各有側重點。由于OpenCV本身即是由C++語言開發的,通過VC++開發OpenCV程序的運行效率要高,看重程序運行效率、對硬件資源利用要求高的開發更多的選擇C++編譯。Python語言具有較強的可讀性,具有易于學習、可擴展、可移植、可嵌入等特點并與具有豐富的標準庫,廣泛應用于追求程序開發速度。
為了有效地提取圖像的關鍵信息,有必要對原始圖像進行一系列的預處理,以便于圖像的特征提取、邊緣分割、圖像匹配與圖像識別。彩色圖像的每個像素點的顏色由G、R、B的值確定的,每個都有255個值可供選擇,而灰度圖像是只有8位的圖像深度,圖像處理所需要的計算量會小很多。圖像灰度化一般常用的方法有三種,平均值法、最大值法、加權平均值法。
函數表達式:
(1)平均值法:Gray(m,n)=[R(m,n)+G(m,n)+B(m,n)]/3
(2)加權平均值法:Gray(m,n)=0.299*R(m,n)+0.587G(m,n)+0.144*B(m,n)
(3)最大值法:Gray(m,n)=0.5*Max{G(m,n),B(m,n),R(m,n)}。
圖像灰度化加權平均值法源代碼:
void cvtCOLOR(Mat src,Mat dst)
{float R,G,B;
for(int y=0;y < src.rows;y++)
{uchar* data=dst.ptr< uchar> (y);
for(int x=0;x < src.cols;x++)
{B=src.at<Vec3b >(y,x)[0];
G=src.at<Vec3b> (y,x)[1];
R=src.at<Vec3b> (y,x)[2];
data[x]=(int)(R*0.299+G*0.587+B*0.114);//利用公式計算圖像灰度值(加權平均法)}}}
int main()
{Mat src=imread("測試.jpg",測試);
Mat dst(src.rows,src.cols,CV_8UC1);//大小與原圖相同的八位單通道圖
cvtCOLOR(src,dst);
namedWindow("原始圖",0);//實現原始圖像可壓縮
imshow("原始圖",src);
namedWindow("灰度圖",0);//實現灰度圖像可壓縮
imshow("灰度圖",dst);
waitKey(0);
return 0;
}

本文通過對圖像處理的相關概念、OpenCV視覺庫及VS+OpenCV圖像處理過程的介紹,幫助大家了解OpenCV在圖像處理領域的應用。通過上面圖像灰度化的實現過程,可以發現利用OpenCV中的算法進行圖像處理的實質就是將模擬圖像數字化之后,對數字圖像中的每個像素的灰度值進行處理。對分別率為MXN的圖像可以看做一個MXN的矩陣,圖像像素與矩陣元素一一對應,圖像處理研究的核心在于算法研究,通過對矩陣元素進行一系列的數學變換,可以實現圖像的增強、變換、分割等。目前,OpenCV中提供了多種的圖像處理算法,同時需要我們在利用其進行圖像處理實踐研究的過程中對其不斷做出改進。