计算机视觉库OpenCV初步了解
OpenCV全稱是OpenSource Computer Vision Library,是一個開放源代碼的計算機視覺庫。OpenCV最初由英特爾公司發起并開發,以BSD許可證授權發行,可以在商業和研究領域中免費試用,現在美國Willow Garage為OpenCV提供主要的支持。OpenCV可用于開發實時的圖像處理、計算機視覺以及模式識別程序,目前在工業界以及科研領域廣泛采用。
OpenCV是一個值得深入研究的庫,暫時做初步了解,后續有需要再深入研究,尤其是SVM和ANN的應用。
1OpenCV開發環境
1)C/C++開發環境:Eclipse CPP+OpenCV
Project–>Properties–>C/C++Build–>Settings–>Tool Settings:
GCC C++Compiler->Includes中添加OpenCV的頭文件目錄;
MinGW C++Linker->Libraries中添加OpenCV的庫文件目錄以及相應的庫文件名稱;首先要下載安裝Opencv。
2)Java開發環境:Eclipse Java
引入opencv-2.4.11-0.11.jar和opencv-2.4.11-0.11-windows-x86_64.jar即可;
稍前版本需要動態加載Opencv的DLL,目前只需引入相應平臺的jar包即可,不安裝opencv,不加載lib庫。稍前版本在引入在opencv-2.4.11-0.11.jar后,選擇該jar包的Native library location,輸入opencv的/build/lib 文件夾下庫目錄(lib)的路徑,當然要先安裝opencv。
2OpenCV庫基礎知識
1)圖像的基本操作
計算機數字圖像用MXN的矩陣表示,矩陣元素的值表示該位置上像素的亮度,像素值越大該點越亮。
一般來說,灰度圖用2維矩陣表示,彩色(多通道)圖像用3維矩陣(MXNX3)表示。對于圖像顯示來說,目前大部分設備都是用無符號8位整數(類型為CV_8U)表示像素亮度。
圖像數據在計算機內存中的存儲順序以圖像最左上點(也可能是最左下點)開始。如果是多通道圖像,比如RGB圖像,則每個像素用三個字節表示。在OpenCV中,RGB圖像的通道順序為BGR。
2)Mat類
既然圖像是通過矩陣表示,矩陣中每個點上的值表示像素亮度,那么Opencv是通過怎樣數據結構來保存一副圖像呢?
Mat類是新版OpenCV保存圖像的數據結構,自動管理內存。
Mat類的具體操作可以參考OpenCV教程。Mat類存儲的圖像,主要就是矩陣操作。
Mat對象由兩個數據部分組成:矩陣頭(包含矩陣尺寸、存儲方法、存儲地址等信息)和一個指向存儲所有像素值的矩陣的指針。
3)圖像讀寫
函數imread()將圖像文件讀入內存,用Mat數據結構存儲表示。將Mat對象以圖像文件格式寫入文件,可以用imwrite()函數。
imread()函數返回的是Mat對象:
Matimread(const string& filename,int flags=1)
filename是被讀取的文件,flag>0函數返回3通道圖像,flag=0返回單通道圖像,flag<0函數不對圖像進行通道轉換。
將圖像從內存寫入文件函數:
boolimwrite(const string& filename,InputArray image,constvector<int>& params=vector<int>())
filename指定存儲的文件路徑和格式。Bmp格式是無損不壓縮格式(文件大)、jpeg是有損壓縮,png是無損壓縮,建議存儲為png。
4)視頻讀寫
視頻的格式主要由壓縮算法決定。壓縮算法稱為編碼器coder,解壓算法稱為解碼器decoder,編解碼算法統稱為編解碼器codec。OpenCV提供VideoCapture來讀視頻和VideoWrite來寫視頻。
VideoCapture既可以從視頻文件中按幀讀取圖像,也可以從攝像頭讀取圖像。
VideoWrite將視頻寫入文件。
5)總結
上面這些opencv庫基礎內容,將圖像讀入后怎么處理就涉及到opencv庫中更多組件的處理。
http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/tutorials.html
可以通過該網站學習到具體圖像處理技術方法。
3SVM和ANN應用
1)支持向量機(SVM) 是一個類分類器,正式的定義是一個能夠將不同類樣本在樣本空間分隔的超平面。 換句話說,給定一些標記好的訓練樣本 (監督式學習),SVM算法輸出一個最優化的分隔超平面。
OpenCV庫提供CvSVM類支持SVM分類。通過CvSVM::train 訓練一個SVM分類器, 以及用 CvSVM::predict 測試訓練結果。
2)OpenCV的ml模塊實現了人工神經網絡(Artificial Neural Networks, ANN)最典型的多層感知器(multi-layer perceptrons, MLP)模型。CvANN_MLP是OpenCV中提供的一個神經網絡的類,正如它的名字一樣(multi-layer perceptrons),它是一個多層感知網絡,它有一個輸入層,一個輸出層以及1或多個隱藏層。
總結
以上是生活随笔為你收集整理的计算机视觉库OpenCV初步了解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 科大讯飞和百度语音平台语音识别Java调
- 下一篇: 算法导论之图的基本算法