1.vc++配置opencvhtml
2.簡單經常使用的圖片處理函數java
3.圖像修復函數python
opencv的項目以來配置和環境變量的配置都很簡單,對於我這個沒有c++基礎的來講,複雜的是opencv的api和一些大部分來自國外沒有翻譯的資料,以及一些常見的編碼問題。c++
opencv 中文apiapi
opencv安裝完成後並配置好vc++項目後,先不要急着去按照書本上的例子打代碼,這裏 咱們介紹一下opencv的安裝目錄,目錄中有很詳盡的功能解決方案,可讓咱們在快速學習或項目時能夠很方便找到相應功能的大致實現思路,因此瞭解opencv的安裝目錄,會加快咱們學習的進度和對總體邏輯的理解。app
下面簡單介紹一下opencv的安裝目錄,以opencv2.4.13爲例dom
opencv的安裝根目錄,其中build文件夾爲配置項目時的依賴文件,這裏在配置時,用處有大致的瞭解函數
以上是build文件夾中的文件tornado
doc:生成文檔所需的源文件以及輔助腳本
include:opencv引用的源碼
java、python:java、python的引用文件
shard:opencv公用的數據文件,xml格式
x6四、x86:不通系統下的依賴文件(3二、64位操做系統)
以上文件是sources文件夾中的文件,是在opencv中比較有趣和讓人興奮的一部分。
3rdparty:包含第三方的庫,好比視頻解碼用的 ffmpeg,jpg、png、tiff等圖片的開源解碼庫。
apps:包含進行 haar 分類器訓練的工具,opencv 進行人臉檢測即是基於 haar 分類器。若是你想檢測人臉之外的圖片,千萬不要錯過這幾個工具。
cmake:包含生成工程項目時 cmake 的依賴文件,用於智能搜索第三方庫,普通開發者不須要關心這個文件夾的內容。
data:包含 opencv 庫以及範例中用到的資源文件,haar 物體檢測的分類器位於haarcascades子文件中。
doc:包含生成文檔所需的源文件以及輔助腳本。
include:源碼文件夾
modules:核心模塊源碼
platforms:包含交叉編譯所需的工具鏈以及額外的代碼,交叉編譯指的是在一個操做系統中編譯供另外一個系統使用的文件。
samples:這個是我最喜歡的一個文件夾了,裏面是代碼的示例。
//聲明IplImage指針 IplImage * pImg; //判斷載入圖像是否成功 if(pImg = cvLoadImage("image url",0/1/-1)!=0){ //建立窗口 cvNamedWindow("Image",1); //顯示圖像 cvShowImage("Image",pImg); //等待按鍵 cvWaitKey(-1); //銷燬窗口 cvDestoryWindow("Image"); //釋放圖像 cvReleaseImage(&pImg); }
使用函數及參數說明:
cvLoadIamge(fileName,flags); fileName:要被讀入的文件的文件名(包括後綴) flags:讀入圖像的顏色和深度(flags=-1默認圖像的原通道;flags=0強制轉化爲灰度圖像;flags=1讀取色彩圖)
cvNamedWindow(windowName,flags);windowName:表示建立的窗口名稱;flags:窗口屬性(flags=0用戶能夠手動更改圖像尺寸;flags=1用戶不可編輯圖像尺寸)
cvWaitKey(delay);函數的功能是不斷刷新圖像,頻率時間爲delay,單位爲ms。
cvDestroyWindow(windowName);銷燬指定名字的窗口。windowName:被銷燬的窗體名稱
cvReleaseImage(image);釋放圖像資源
//打開圖像 IplImage* pImg = createImage(); //根據打開的圖像建立圖像 IplImage * pImg2 = cvCreateImage(cvGetSize(pImg), pImg->depth, pImg->nChannels); //拷貝圖像 cvCopy(pImg, pImg2, NULL); //設置該圖像保存目錄 cvSaveImage("image uri", pImg2); //釋放該圖片資源 cvReleaseImage(&pImg2);
使用函數及參數說明:
cvCopy:拷貝一個數組給另外一個數組。
cvCopy( const CvArr* src, CvArr* dst, const CvArr* mask=NULL )
//聲明兩個圖片指針 IplImage* src = 0;//源圖 IplImage* dst = 0;//新圖 float scale = 0.218;//縮放比例 取值0~1 源圖比例爲1 CvSize dst_cvsize; //新圖尺寸 //判斷路徑圖片是否存在 並賦值給src對象 if ((src = cvLoadImage("E:\\tiger.jpg")) != 0){ //根據scale參數設置新圖寬高 dst_cvsize.width = src->width * scale; dst_cvsize.height = src->height * scale; //以dst_cvsize 建立圖片 並指向新圖指針 dst = cvCreateImage(dst_cvsize, src->depth, src->nChannels); //縮放源圖至目標圖 cvResize(src,dst,CV_INTER_LINEAR); //建立圖像窗口 cvNamedWindow("src image window",CV_WINDOW_AUTOSIZE); cvNamedWindow("dst image window", CV_WINDOW_AUTOSIZE); //顯示兩張圖片 cvShowImage("src image window",src); cvShowImage("dst image window", dst); //等待用戶響應 cvWaitKey(-1); //釋放指針內存 cvReleaseImage(&src); cvReleaseImage(&dst); //銷燬全部窗口資源 cvDestroyAllWindows();
使用函數及參數說明:
cvResize:從新調整圖像src(或它的ROI),使它精確匹配目標dst(或其ROI)。這裏須要說明的是,cvResize能夠用來調整3通道圖像(如RGB圖像)和單通道圖像的大小。
cvResize( const CvArr* src, CvArr* dst, int interpolation=CV_INTER_LINEAR )
IplImage*src1, *src2; if ((src1 = cvLoadImage("image1 url", 1)) != 0 && (src2 = cvLoadImage("image2 url", 1)) != 0) { int x = 20; int y = 20; int width = 200; int height = 200; double alpha = 0.9; double beta = 0.1; cvSetImageROI(src1, cvRect(x, y, width, height)); cvSetImageROI(src2, cvRect(x, y, width, height)); cvAddWeighted(src1, alpha, src2, beta, 0.0,src1 ); cvResetImageROI(src1); cvNamedWindow("alpha_blend", 1); cvShowImage("alpha_blend", src1); cvWaitKey(); }
使用函數及參數說明:
cvAddWeighted:分割多通道數組成幾個單通道數組或者從數組中提取一個通道。
cvAddWeighted( const CvArr* src1, double alpha, const CvArr* src2, double beta, double gamma, CvArr* dst );
代碼解讀:
1.聲明兩個圖像指針,經過cvLoadImage函數爲其指定圖片路徑,並判斷其圖片讀取合法性。
2.cvSetImageTOI函數標定cvRect函數所指定的座標大小區域。
3.針對於操做區域進行圖像的融合。
4.顯示圖像。