OpenCV学习笔记(十六)——CamShift研究 OpenCV学习笔记(十七)——运动分析和物体跟踪Video OpenCV学习笔记(十八)——图像的各种变换(cvtColor*+)imgproc
OpenCV學(xué)習(xí)筆記(十六)——CamShift研究
CamShitf算法,即Continuously Apative Mean-Shift算法,基本思想就是對視頻圖像的多幀進(jìn)行MeanShift運(yùn)算,將上一幀結(jié)果作為下一幀的初始值,迭代下去。基本步驟為:
1.選取關(guān)鍵區(qū)域
2.計(jì)算該區(qū)域的顏色概率分布--反向投影圖
3.用MeanShift算法找到下一幀的特征區(qū)域
4.標(biāo)記并重復(fù)上述步驟
該算法的關(guān)鍵就是可以在目標(biāo)大小發(fā)生改變的時(shí)候,可以自適應(yīng)的調(diào)整目標(biāo)區(qū)域繼續(xù)跟蹤
在進(jìn)行CamShitf和MeanShift算法的時(shí)候,需要輸入反向投影圖,這就要求有個(gè)很重要的預(yù)處理過程是計(jì)算反向投影圖。對應(yīng)的函數(shù)為calcBackProject。所謂反向投影圖就是一個(gè)概率密度圖。calcBackProject的輸入通常為目標(biāo)區(qū)域的直方圖和待跟蹤圖像的直方圖,輸出與待跟蹤圖像大小相同,每一個(gè)像素點(diǎn)表示該點(diǎn)為目標(biāo)區(qū)域的概率。這個(gè)點(diǎn)越亮,該點(diǎn)屬于物體的概率越大。這樣的輸入?yún)?shù)太適合做MeanS算法了。關(guān)于反向直方圖,可以參考一下這篇文章http://blog.163.com/thomaskjh@126/blog/static/370829982010112810358501/
具體代碼如下:
[cpp]?view plain?copy
?OpenCV學(xué)習(xí)筆記(十七)——運(yùn)動(dòng)分析和物體跟蹤Video
這個(gè)庫中相關(guān)的函數(shù)有calcOpticalFlowPyrLK、calcOpticalFlowFarneback、estimateRigidTransform、updateMotionHistory、calcMotionGradient、calcGlobalOrientation、segmentMotion、CamShift、meanShift;還有卡爾曼濾波器類KalmanFilter,類內(nèi)成員函數(shù)有構(gòu)造函數(shù)、init、predict、correct。背景單元類BackgroundSubtractor,包括運(yùn)算符重載,getBackgroundImage,其派生類BackgroundSubtractorMOG和BackgroundSubtractorMOG2,以及只支持Python版本的函數(shù)CalcOpticalFlowBM、CalcOpticalFlowHS,c版本的函數(shù)cvCalcOpticalFlowLK
這些函數(shù)每一個(gè)背后幾乎都是一篇論文,很多都是經(jīng)典的方法,我才疏識淺,只能邊學(xué)邊總結(jié),先介紹一些我用過的函數(shù),待日后陸續(xù)補(bǔ)充
calcOpticalPlowPyrLK是利用Lucas-Kanade方法計(jì)算圖像的光流場
?OpenCV學(xué)習(xí)筆記(十八)——圖像的各種變換(cvtColor*+)imgproc?
imgproc是OpenCV一個(gè)比較復(fù)雜的lib,我是分開介紹的,之前介紹過了濾波器、直方圖、結(jié)構(gòu)分析和形狀描述三節(jié),這次介紹一下圖像的變換,OpenCV對于圖像的變換又可分為幾何變換和其他的變換,我這節(jié)先介紹一下其他的變換。
這部分的函數(shù)包括adaptiveThreshold,對圖像進(jìn)行自適應(yīng)的閾值操作。
相應(yīng)的也有更一般常用的閾值操作函數(shù)threshold。
這里還是詳細(xì)介紹一下cvtColor,這個(gè)函數(shù)是用來進(jìn)行顏色空間的轉(zhuǎn)換,隨著OpenCV版本的升級,對于顏色空間種類的支持也是越來越多。這里匯總一下,把我知道的全部空間列舉出來,也許還不完整,希望大家補(bǔ)充。需要先告訴大家的是OpenCV默認(rèn)的圖片通道是BGR。
RGB <--> BGR:CV_BGR2BGRA、CV_RGB2BGRA、CV_BGRA2RGBA、CV_BGR2BGRA、CV_BGRA2BGR
RGB <--> 5X5:CV_BGR5652RGBA、CV_BGR2RGB555、(以此類推,不一一列舉)
RGB <---> Gray:CV_RGB2GRAY、CV_GRAY2RGB、CV_RGBA2GRAY、CV_GRAY2RGBA
RGB <--> CIE XYZ:CV_BGR2XYZ、CV_RGB2XYZ、CV_XYZ2BGR、CV_XYZ2RGB
RGB <--> YCrCb(YUV) JPEG:CV_RGB2YCrCb、CV_RGB2YCrCb、CV_YCrCb2BGR、CV_YCrCb2RGB、CV_RGB2YUV(將YCrCb用YUV替代都可以)
RGB <--> HSV:CV_BGR2HSV、CV_RGB2HSV、CV_HSV2BGR、CV_HSV2RGB
RGB <--> HLS:CV_BGR2HLS、CV_RGB2HLS、CV_HLS2BGR、CV_HLS2RGB
RGB <--> CIE L*a*b*:CV_BGR2Lab、CV_RGB2Lab、CV_Lab2BGR、CV_Lab2RGB
RGB <--> CIE L*u*v:CV_BGR2Luv、CV_RGB2Luv、CV_Luv2BGR、CV_Luv2RGB
RGB <--> Bayer:CV_BayerBG2BGR、CV_BayerGB2BGR、CV_BayerRG2BGR、CV_BayerGR2BGR、CV_BayerBG2RGB、CV_BayerGB2RGB、 CV_BayerRG2RGB、CV_BayerGR2RGB(在CCD和CMOS上常用的Bayer模式)
YUV420 <--> RGB:CV_YUV420sp2BGR、CV_YUV420sp2RGB、CV_YUV420i2BGR、CV_YUV420i2RGB
還有函數(shù)distanceTransform,是用來計(jì)算各像素距離最近的零像素距離的。
floodFill函數(shù)用來用指定顏色填充一個(gè)連通部件。
inpaint函數(shù)用來用附近區(qū)域信息重建選中區(qū)域,可以對圖像里由于傳輸噪聲丟失的塊進(jìn)行重建。
integral函數(shù)用來獲得圖像的積分值。
尋找邊界使用分水嶺分割辦法的函數(shù)watershed。
對圖像進(jìn)行GrabCut算法的grabCut函數(shù)(有待研究,不熟悉)。
總之,這些變換千奇百怪,不是很系統(tǒng),常用的還是我先介紹的幾個(gè),比如threshold、cvtColor。就這樣吧,以后有收獲再陸續(xù)補(bǔ)充。
OpenCV學(xué)習(xí)筆記(十九)——淺嘗contrib?
contrib為最新貢獻(xiàn)但不是很成熟的函數(shù)庫。作為最新的東西,就更有價(jià)值進(jìn)行庖丁解牛了,我來也。
首先介紹一個(gè)CvAdaptiveSkinDetector類。該類的功能是自適應(yīng)的皮膚檢測。分析了一下代碼,其構(gòu)造函數(shù)的輸入?yún)?shù)有兩個(gè),samplingDivider樣本分類,morphingMethod為變形方法。該類的關(guān)鍵函數(shù)為process函數(shù),該函數(shù)先將輸入圖像由RGB轉(zhuǎn)換為HSV空間,Hue的范圍是3~33,Intensity(V)的范圍為15~250。然后進(jìn)行必要的腐蝕膨脹,去除噪聲,使輪廓更加清晰平滑。具體的使用代碼參考sample文件夾中的adaptiveskindetector.cpp
OpenCV學(xué)習(xí)筆記(二十)——手勢識別
最近也在玩手勢識別,資料找了很多,基本可以分為靜態(tài)手勢識別和動(dòng)態(tài)手勢識別,先弄個(gè)簡單的靜態(tài)手勢識別給大家看看。
基本流程如下:
先濾波去噪-->轉(zhuǎn)換到HSV空間-->根據(jù)皮膚在HSV空間的分布做出閾值判斷,這里用到了inRange函數(shù),然后進(jìn)行一下形態(tài)學(xué)的操作,去除噪聲干擾,是手的邊界更加清晰平滑-->得到的2值圖像后用findContours找出手的輪廓,去除偽輪廓后,再用convexHull函數(shù)得到凸包絡(luò)。
結(jié)果如下:
源代碼下載位置:http://download.csdn.net/detail/yang_xian521/3746669,有點(diǎn)貴哦,當(dāng)時(shí)隨便設(shè)了個(gè)值,呵呵
from: http://blog.csdn.net/yang_xian521/article/category/910716
總結(jié)
以上是生活随笔為你收集整理的OpenCV学习笔记(十六)——CamShift研究 OpenCV学习笔记(十七)——运动分析和物体跟踪Video OpenCV学习笔记(十八)——图像的各种变换(cvtColor*+)imgproc的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: OpenCV学习笔记(十一)(十二)(十
- 下一篇: OpenCV学习笔记(二十一)——绘图函