Opencv..2

來源:互聯網
上載者:User

 boss要求:看懂API,把術語給我搞清楚。

http://opencv.willowgarage.com/documentation/cpp/index.html

1。不能看圖形學基礎東東,要看項目有關的函數和方法,否則時間和精力都不允許。
2。看英文Api,

http://download.csdn.net/tag/opencv%EF%BC%8C%E5%9B%BE%E5%83%8F%E5%8C%B9%E9%85%8D

3。問boss:這個usb網路攝影機硬體會不會升級到有顏色,而不僅僅只是一個輪廓線條。還是我們就在這個基礎上來作開發
因為我查資料也是可以通過顏色等一些東西來進行比較,所以我想問問,如果我們不涉及到顏色,我就不用再看。

解決方案:page 247
從上,下,左,右,停,OK 等 手勢中得到邊緣梯度,然後設定一個攝像機,該攝像機觀察人的各種手勢以控制網路
視頻。在每禎中,從輸入的視頻中檢測檢測"-感興趣的色彩地區",然後計算這些感興趣地區周圍的"-邊緣梯度方向",
將得到的邊緣梯度方向放到一個方向長條圖相應的bin中,然後將該長條圖與手勢模板進行匹配,從而識別出各種手勢。

長條圖:
1。資料結構 CvHistogram; 
2.建立一個新的長條圖: CvHistogram* cvCreateHist();
3.在使用長條圖之前給rangs設定數值,cvSetHistBinRanges();
4.清0長條圖,和,釋放長條圖: cvClearHist() , cvReleaseHist();
5.根據已給出的資料建立長條圖。cvMakeHistHeaderForArray();
6.訪問長條圖:cvQueryHistValue_1D or 2D or 3D or nD 每個函數都返回相應bin中的值的浮點數。可以得到長條圖的維數或每個單獨的bin表示的地區等。
7.長條圖的基本操作:
  cvNormalizeHist();貌似是歸一化函數  . 歸一化是什嗎?:就是把資料做成圖形 或者 把資料百分比化
  cvThreshHist();悶或值函數
  cvCopyHist()表示將一個長條圖的資訊複製到另一個長條圖
  cvGetMinMaxHistValue()他輸出長條圖中找到的最小值和最大值。
  cvCalcHist(),從映像這哦姑娘自動計算長條圖。 page 256.
對於多通道映像,在調用cvCalcHist()之前,先要用函數cvSplit()將映像分為但通道的。
8.對比2個長條圖。相似性。cvCompareHist() 用來比較兩個長條圖的相似性。page 257
    完全符合的值為0,完全不匹配為無限值,對於chi-square,低分比高分匹配的匹配程度高。
9。長條圖相交 page 257
10。距離測量:利用長條圖的距離測量來代替長條圖的匹配策略,那麼我們仍然可以像長條圖對比一樣對比兩個直方
圖的距離,即使第二個長條圖發生飄逸,也能找到最小的距離度量。
---------------
輪廓:
Canny之類的邊緣檢測演算法並沒有將輪廓作為一個整體,下一步是要把這些邊緣像素組裝成輪廓。
cvFindContours()輪廓檢測。
1。尋找輪廓:
一個輪廓一般對應一系列的點,也就是映像中的一條曲線,表示方法可能根據不同情況而有所不同,有多種方法可以
表示曲線。在Opencv中一般用序列來儲存輪廓資訊。(同vector差不多啦),序列中每一個元素是曲線中一個點的
位置。只要簡單把輪廓想象為CvSeq就可以了,CvSeq表示一系列的點就可以了。
cvFindContours()從二值映像中尋找輪廓,他們可以是從cvCanny()函數得到的有邊緣像素的映像,也可以是
cvThreshold() or cvAdaptiveThreshold()得到的映像。這時的邊緣是正和負地區之間的邊界。

2。cvFindContours()會把映像會被直接塗改,因此如果是將來還有用的映像,應該留有備份
 1)參數1,映像 參數2,記憶體儲存空間 cvFindContours()找到的輪廓記錄在此記憶體裡,找到的輪廓就儲存在此記憶體裡面
參數3,隨便傳一個指向CvSeq*的指標,系統會自動化佈建他, 他指向輪廓樹的首地址。
 2)傳回值:找到的所有輪廓的個數。
 3)幾種不同的檢測模式 page 295, 比如:只檢測出最外面的輪廓,內外都檢測出來等。

3。幾種處理輪廓/序列輪廓的函數
 cvFindContours();
 cvStartFindContours();與上面這個函數一樣,但是他不同在於,每次返回一個輪廓。返回的結構是CvSequenceScanner
,你可以通過在CvSequenceScanner上依次調用cvFindNextContour()來尋找剩餘的輪廓。當全部輪廓找完後,就
返回NULL.
 cvFindNextContour();
 cvSubstituteContour();用於替換scanner指向的輪廓 page 296
 cvEndFindContour();結束輪廓尋找,並將scanner設定為結束狀態。
 cvApproxChains();該函數將Freeman鏈轉換為多邊形表示
 
Freeman 鏈碼:
    對於識別一些形狀的物體很有協助
 1。cvFindContours的method參數為CV_CHAIN_CODE時,檢測的輪廓通過Freeman鏈碼方式返回。

 2。如果得到的是Freeman鏈碼,可以通過以下2個函數讀出每個點:。。。297左右吧。

--------------------------------------------------------------------------------------
    1)cvStartReadChainPoints();第一個函數用來初始化Freeman鏈CvChainPtReader結構,
    2)cvReadChainPoinit();第二個函數通過CvChainPtReader來讀每個點,CvChainPtReader對應當前 狀態。

多邊形逼近: cvApproPoly . 
特性概括: 長度, 邊界框,圓形和橢圓形邊界框,幾何,

輪廓的匹配   :
矩:是一個粗略的特徵。歸一化都是小於1的。所以指數 越大所得到的數值就越小。

開啟視頻檔案,網路攝影機  :
 CvCapture* cvCaptureFromFile(const  char * filename) / cvCaptureFromCAM(int index)
CvCapture結構需要用cvReleaseCapture函數釋放。
從視頻或者網路攝影機中讀取每一偵,
  int cvGrabFrame(CvCapture* capture 抓取一陣,並儲存於內部);
  IplImage* cvRetrieveFrame(CvCapture* capture); 把Grab的偵取出(返回的映像不可以被使用者釋放)
  IplImage* cvQueryFrame(CvCapture* capture);  ==>     cvGrabFrame + cvRetrieveFrame
設計cvGrabFrame是為了快速遍曆視頻中的偵,或者同步多個網路攝影機。
  將映像序列寫入視頻檔案。   

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.