1. 程式人生 > >opencv3.1自帶demo的介紹和執行操作

opencv3.1自帶demo的介紹和執行操作

下列實驗基本都試過,有些需要根據自己的電腦修改一些路徑或者除錯引數.

       值得注意的是,控制檯程式輸入有時候要在影象所在的視窗輸入相應的指令。我的電腦上安裝了vs2013和2015. vs2015+opencv3.1/2.4.9在我的電腦上經常有這個錯誤:xxxx處有未經處理的異常: 將一個無效引數傳遞給了將無效引數視為嚴重錯誤的函式 ,或者提示在vector.h裡的錯誤。後來用VS2013+Opencv3.1就沒有這個問題。 opencv可能還是有些bug,最好用vs2013吧. 

Opencv的 CommandLineParser類原意是讓帶命令引數執行的程式呼叫起來更方便,但是我沒少被這個東西坑,老出現修改了命令引數但是程式沒讀到我的引數的情況(後來試著輸出argv發現空格的地方是個問號“?”,也就是程式沒識別出這個空格來,反正我不想管了哈哈哈),可以直接在CommandLineParser 的keys裡面新增預設值,CommandLineParser類怎麼用乖乖看英文文件吧。http://docs.opencv.org/3.0.0/d0/d2e/classcv_1_1CommandLineParser.html

3calibration.cpp 三個相機的標定,沒有三個相機,所以沒測試
autofocus.cpp 自動對焦,沒有這種相機,沒測試
bgfg_segm.cpp   混合高斯模型的前景背景分割
camshiftdemo.cpp camshift跟蹤,預設開啟攝像頭,滑鼠選中一個物體即可跟蹤
calibration.cpp 單個攝像頭標定,需要用imagelist_creator.cpp 生成一個影象檔案list,一個參考的命令引數是:-w=7 -h=8 -s=30 -o=camera.yml -op -oe imagelist.yml  
cloning_demo.cpp  /cloning_gui.cpp    影象融合
connected_components.cpp   連通域分析
contours2.cpp    輪廓/繪製 輪廓
convexhull.cpp  尋找凸包
cout_mat.cpp    輸出 mat中的資料
create_mask.cpp  生成剪影圖,用來做影象融合之類的。用滑鼠操作即可
delaunay2.cpp   隨機點生成delaunay三角網,可以用來做三維重建之類的吧。
dbt_face_detection.cpp  linux下的人臉識別,沒試
demhist.cpp    直方圖生成 繪圖
detect_blob.cpp  團塊檢測
detect_mser.cpp   最大穩定極值區域(MSER-Maximally Stable Extremal Regions)可以用於影象的斑點區域檢測。該演算法最早是由Matas等人於2002年提出,它是基於分水嶺的概念。
dft.cpp   dft變換
distrans.cpp  距離變換   距離變換和線性濾波器,形態學變換處於平等位置,是影象處理的一種方法,通過使用兩遍掃描光柵演算法可以快速計算到曲線或點集的距離。 應用:水平集 快速斜切匹配 影象拼接 影象混合的羽化 臨近點配準
drawing.cpp  直線,多邊形,橢圓,文字等繪畫
edge.cpp canny邊緣檢測
em.cpp  em聚類,em model使用的例子,可以用來預測分類、聚類,類似多個高斯函式疊加
facedetect.cpp 人臉人眼檢測
facial_features.cpp    Haarcascade classifiers for face, eyes, nose and mouth 人臉,人眼,鼻子嘴巴之類的檢測
 fback.cpp          稠密點的光流法跟蹤       This program demonstrates dense optical flow algorithm by Gunnar Farneback\n"
ffilldemo.cpp   漫水演算法
filestorage.cpp  存取檔案操作,可以儲存為。txt或者任何其他字尾的格式的資料
fitellipse.cpp  拖圓擬合,將圖片二值化之後取輪廓,擬合。
grabcut.cpp  選取區域,前景點背景點,前背景自動分割。能反覆選取前景,背景點畫素,分割效果還是挺好的,另外有抓取螢幕點的操作可以借鑑。具體的演算法看這個http://blog.csdn.net/zouxy09/article/details/8534954
houghcircles.cpp  霍夫圓檢測
houghlines.cpp  霍夫直線檢測
image.cpp  iplimag轉Mat 三通道分離合並,YUY RGB轉換等
image_alignment.cpp  影象配準的演算法,用的是ECC影象配準方法,我所試驗的幾個圖片配準效果都不是很好,但是有幾個warp函式可以借鑑,用來旋轉、平移和仿射變換等。下面是一個呼叫的命令引數格式。D:\\Users\\jack\\Desktop\\ForTheOpencv\\5.jpg D:\\Users\\jack\\Desktop\\ForTheOpencv\\7.jpg -o=outWarp.ecc -m=homography -e=1e-6 -N=70 -v=1
image_sequence.cpp   用VideoCapture 讀取連續的 影象序列,挺實用的一個例子。  下面是一個呼叫的命令引數格式    C:\Users\Administrator\Desktop\matlabEyeTraking\1\%d.bmp
imagelist_creator.cpp     建立一個呼叫過的agv引數的list並且儲存。 命令引數的格式為 xx.yml  G:\opencv31\opencv\sources\samples\data\left13.jpg 後面可以載入n個影象檔案路徑,用空格隔開即可。  
inpaint.cpp  應該是用來給視訊或者影象“打碼”的演算法,通過滑鼠畫需要處理的部分,按下空格鍵處理影象。
intelperc_capture.cpp  這個好像要有英特爾的深度相機才能玩的。 This program demonstrates usage of camera supported\nby Intel Perceptual computing SDK
kalman.cpp 卡爾曼濾波的呼叫,生成一個隨機運動的點,然後用卡爾曼濾波來預測跟蹤。
kmeans.cpp K均值聚類方法,隨機生成幾個點云然後聚類
laplace.cpp  拉普拉斯邊緣,二次微分的邊緣,可用於增強之類的。
letter_recog.cpp 字元識別(分類) 可以選擇 隨機森林,boost ,k近鄰,正態貝葉斯,SVM,多層神經網路等方法。是一個機器學習的訓練和測試的demo. 通過修改命令引數測試發現,這個程式碼中效果最好的居然是knn. 具體問題分類的效果還是要看具體的特徵,一個個試吧。
lkdemo.cpp   LK光流法跟蹤,點選一些點然後可以跟蹤,效果不錯,速度也比較快。
logistic_regression.cpp  logistic迴歸做分類(二分) 用的是手寫數字0和1分類,好像效果還行。
lsd_lines.cpp  lsd直線檢測,效果好像比hoghline好點 短線段比較多。
mask_tmpl.cpp  用一個掩模來做模板匹配.掩模的作用是權值吧,比如尋找某些標誌時候,用相同的幾何形狀來早匹配。不用掩模也可以做匹配。
matchmethod_orb_akaze_brisk.cpp   ORB BRISK   AKAZE特徵描述子的提取和匹配,通過空格鍵控制不同的描述子或者匹配方式,在魯棒性上SIFT<SURF<BRISK<FREAK<ORB 在對有較大模糊的影象配準時,BRISK演算法在其中表現最為出色。這幾個特徵點匹配的方法。
minarea.cpp 計算最小外接圓,矩形和三角形的函式。
morphology2.cpp 形態學的開運算,閉運算,膨脹腐蝕的示例
npr_demo.cpp  非真實渲染,給圖片增強、模糊,轉化成水彩或者鉛筆圖等。
opencv_version.cpp  輸出opencv版本號
openni_capture.cpp  深度相機的採集(Kinect等)
pca.cpp   PCA降維,在命令引數中輸入一個list,list可以是一個txt之類的文字檔案,文字每一行是一張圖片的完整路徑。可以下載作者提供的人臉資料庫,最後降維成特徵臉。
phase_corr.cpp  相位相關法(phase correlate)可以用於檢測兩幅內容相同的影象之間的相對位移量,本程式呼叫攝像頭,直接計算兩幀之間的相對運動並顯示出了,速度比較快,但是效果不一定很好。可以做穩像,防抖之類的吧
points_classifier.cpp  點分類器,只有0 1 兩個類通過鍵盤上的按鍵來確定當前類,用滑鼠在彈出的視窗上點選一些點作為訓練點,用0 1兩個按鍵來控制當前點的類別(紅色和綠色)最後輸入字幕r即可看分類效果。程式把二維空間分類成兩個部分。方法有EM KNN SVM 決策樹,adaboost, gradient boosted trees, 隨機森林,神經網路等方法。是一個比較好的機器學習的demo。
polar_transforms.cpp  This program illustrates Linear-Polar and Log-Polar image transforms  極座標轉換,在命令引數中輸入數字(0)開啟攝像頭或者輸入完整的avi路徑和檔名即可執行。
segment_objects.cpp  混合高斯模型的前背景分割用了聯通閾分析形態學運算之類的來進一步refine前景和背景,可以通過空格鍵控制是否學習背景。 預設開啟攝像頭,也可以用完整的avi路徑作為輸入。
select3dobj.cpp  這個需要先標定相機的內參,本程式能夠實時的矯正畸變。據說還有一些grabcut和3d的track的功能,但我執行的時候總有bug,沒試出,大家可以自己試試吧,我放棄了。
shape_example.cpp  shape context形狀匹配演算法。可以對比形狀的相似性。用的是輪廓點的座標作為輸入。
smiledetect.cpp 笑臉檢測,效果還是可以的,速度略慢,用一個bar來輸出笑臉的分數。
squares.cpp 矩形檢測,檢測影象中的矩形(挺實用的)
starter_imagelist.cpp 上面imaglist_creator創建出的list的影象讀取的demo
starter_video.cpp 開啟攝像頭或者avi,按下空格鍵就儲存影象,挺實用的,比如相機標定的時候
stereo_calib.cpp  雙目視覺標定,預設開啟data資料夾下的圖片和圖片的list,list可能需要根據自己電腦修改。輸出一個相機外參的檔案。
stereo_match.cpp  視差圖生成。輸入左右兩個相機的內外引數,輸入左右影象以及一些其他引數,生成視差圖,可能是在內參或者外參標定的時候有問題,視差圖效果不好。
stitching.cpp 全景圖拼接,手機隨便拍了三張圖,在命令引數處輸入他們的地址,試了下效果還是可以,就是時間比較長用了一分多鐘。
stitching_detailed.cpp  也是全景圖拼接,可這個比較detail各種引數,實在不是幹這個的,就不試了。
videostab.cpp 電子穩像,在命令引數輸入一個畫面抖動的avi檔案,執行程式能自動生成畫面穩定的視訊,對的,就這麼神奇。各種引數多多我也不想深究。
watershed.cpp 分水嶺演算法。執行之後在影象上用滑鼠選取一些點,空格鍵即可執行
cpp資料夾裡還有兩個沒試的演算法 一個是tvl1_optical_flow.cpp,另一個是tree_engine.cpp 這兩個都是機器學習的程式碼,以後專門寫一個吧。