OpenCV其實就是一堆用C和C++語言來實現計算機視覺算法的源代碼文件;例如C接口函數cvCany()實現了Canny邊緣提取算法,咱們能夠直接將這些源代碼添加到本身的軟件項目中,而不須要本身去寫代碼實現Canny算法。同時因爲源文件居多,因此根據算法的功能將源文件分到多個模塊中(以下),將每一個模塊中的源文件編譯成一個庫文件(如opencv_core.lib、opencv_highgui.lib),用戶調用時僅將所需的庫文件添加到本身的項目中,與本身的源文件一塊兒鏈接成可執行程序便可。c++
一、CV圖像處理和視覺算法算法
二、MLL統計分類器數組
三、HighGUI圖像和視頻輸入/輸出數據結構
四、CXCORE(基本結構和算法,XML支持,繪圖函數)函數
五、CvAux(存放即將被淘汰的算法和函數,新出現的實驗性算法和函數)ui
(CVCAM攝像機接口屬於OpenCV1.0版內容,在之後的版本中被棄用)spa
c/c++語言中的main函數,常常帶有參數argc,argv,以下:操作系統
int main(int argc,char** argv)或者int main(int argc,char* argv[])命令行
*一、argc:命令行輸入參數個數,以空白符分隔3d
*二、argv:中存儲了命令行參數
*三、以下圖在dos命令下進入到openpictures.exe文件所在目錄下運行命令:openpictures.exe lena.jpg lena2.jpg
那麼有:argc=3,argv[0] = openpictures.exe,argv[1] = lena.jpg,argv[2] = lena2.jpg。
輸入openpictures.exe lena.jpg命令符後,執行:顯示lena.jpg圖片的功能
輸入openpictures.exe lena.jpg lena2.jpg命令符後,執行:顯示lena.jpg圖像、並將其寫入lena2.jpg文件
(你會發如今lena.jpg所在文件目錄下多出來一個lena2.jpg文件而且跟lena.jpg圖片信息同樣)
IPL_DEPTH_8U:無符號8bit整型
IPL_DEPTH_8S:無符號8bit整型
IPL_DEPTH_16U:無符號16bit整型
IPL_DEPTH_16S:有符號16bit整型
IPL_DEPTH_32S:有符號32bit整型
IPL_DEPTH_32F:單精度浮點數
IPL_DEPTH_64F:雙精度浮點數
#include "stdafx.h" #include "highgui.h" int main(int argc, char** argv) { IplImage* pImg; //聲明IplImage指針 if(argc == 2 && (pImg = cvLoadImage(argv[1],1)) != 0) //當(「輸入兩個字符串」而且「成功讀入圖片」)時 { cvNamedWindow("Image",1); //建立標題爲Image的窗口,而且隨實際圖片大小改變窗口尺寸 cvShowImage("Image",pImg); //在Image窗口內顯示pImg指針所指圖像 cvWaitKey(); //等待按鍵 cvDestroyWindow("Image"); //銷燬窗口 cvReleaseImage(&pImg); //釋放圖像 return 0; } else if(argc == 3 && (pImg = cvLoadImage(argv[1],1)) != 0) //當(「輸入三個字符串」而且「成功讀入圖片」)時 { IplImage* pImg2 = cvCreateImage(cvGetSize(pImg),pImg->depth,pImg->nChannels); //以圖像pImg的格式建立圖像pImg2 cvCopy(pImg,pImg2,NULL); //複製pImg圖像數據到pImg2 cvSaveImage(argv[2],pImg2); //把圖像pImg2寫入以輸入第三個字符串爲名字的文件中 cvNamedWindow("Image",1); //建立窗口 cvShowImage("Image",pImg); //顯示圖像 cvWaitKey(0); //等待按鍵 cvDestroyWindow("Image"); //銷燬窗口 cvReleaseImage(&pImg); //釋放圖像 return 0 ; } return -1; }