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