Opencv視頻教程分析課件_第1頁
Opencv視頻教程分析課件_第2頁
Opencv視頻教程分析課件_第3頁
Opencv視頻教程分析課件_第4頁
Opencv視頻教程分析課件_第5頁
已閱讀5頁,還剩53頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、Opencv視頻教程Opencv結構與內容Opencv結構cxcorecvMachine Learning(ML)HighGUIcvcamcvauxcxcore基礎結構:CvPoint,CvSize,CvScalar等數(shù)組操作:cvCreateImage,cvCreateMat等動態(tài)結構:CvMemStorage,CvMemBlock等繪圖函數(shù):cvLine,cvRectangle等數(shù)據保存和運行時類型信息:CvFileStorage,cvOpenFileStorage等錯誤處理和系統(tǒng)函數(shù):cvGetErrStatus,cvAlloc,cvFree等cv圖像處理:cvSobel,cvCanny

2、等結構分析:ContourArea等運動分析與目標跟蹤:cvMeanShift等模式識別:CvHaarFeature攝像頭定標與三維重建:cvCalibrateCamer2Machine Learning(ML)包含許多聚類、分類和數(shù)據分析函數(shù)。如Bayes分類器,K近鄰算法,支持向量機,決策樹,神經網絡等等。HighGUI圖像界面函數(shù):cvNamedWindow讀圖像和保存圖像:cvLoadImage,cvSaveImage讀視頻和寫視頻:CvCreateFileCapture等cvcam攝像機接口,在Opencv1.0以后的版本中已經被移除cvaux該模塊中一般存放一些即將被淘汰的算法和函

3、數(shù)(如基于嵌入式隱馬爾科夫的人臉識別算法),還包含一些實驗性的算法和函數(shù)(前景檢測,背景剔除等)Opencv的結構Opencv視頻教程顯示圖像第一個程序:顯示圖像基于Opencv,我們可以讀取各種圖像文件,視頻文件,還可以讀取攝像頭。這些功能是Opencv開發(fā)包中HighGUI工具集的一部分。下面,我們就使用其中的一些功能來實現(xiàn)如何顯示一幅圖像。顯示圖像代碼#include highgui.hint main(int argc, char* argv)IplImage* src = cvLoadImage(F:psbCA2V1GZ7.jpg , 1);cvNamedWindow(show_im

4、age);cvShowImage(show_image,src);cvWaitKey(0);return 0;cvLoadImage(char* filename,int flags=CV_LOAD_IMAGE_COLOR)Filename:圖像所在路徑Flags:/* 圖像顏色不變 */#define CV_LOAD_IMAGE_UNCHANGED -1/*灰度圖像(單通道) */#define CV_LOAD_IMAGE_GRAYSCALE 0/* 彩色圖像(3通道圖像) */#define CV_LOAD_IMAGE_COLOR 1cvLoadImage參數(shù)說明Flags:/*則輸入圖像

5、格式可以為8位無符號,16位無符號,32位有符號或者32位浮點型 */ #define CV_LOAD_IMAGE_ANYDEPTH 2/* 保持原樣 */#define CV_LOAD_IMAGE_ANYCOLOR 4cvLoadImage參數(shù)說明如果想要載入最真實的圖像,選擇CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR 如果輸入有沖突的標志,將采用較小的數(shù)字值。比如CV_LOAD_IMAGE_GRAYSCALE | CV_LOAD_IMAGE_COLOR將載入單通道圖。 cvLoadImage的功能通過文件名確定被加載圖像的格式,并且該函數(shù)

6、在內部分配圖像數(shù)據結構所需要的內存空間。支持的圖像格式:BMP,DIB,JPEG,JPE,PNG,PBM,PGM,PPM,SR,RAS,TIFF。Int cvNamedWindow(char*name,int flagsname:窗口的標志。如果已經有同名窗口,則該函數(shù)什么也不干。Flags:CV_WINDOW_AUTOSIZE ,會根據圖像大小自動調整窗口大小。如果是0,則窗口大小不變。cvShowImage(char* name,IplImage* dst)功能:在指定窗口上顯示圖像。name:窗口的標志。這個標志是cvNamedWindow函數(shù)設定的。dst:被顯示的圖像。Int cvW

7、aitKey(int key)Key:如果key的值是大于0的數(shù),那么該函數(shù)的功能是,在此處暫停key毫秒。如果是小于等于0的數(shù),那么,該函數(shù)是在等待用戶的按鍵輸入。cvReleaseImage(IplImage* src)釋放圖像空間。cvDestroyWindow(char* name)注銷一個窗口。同時釋放為該窗口所分配的所有內存(包括窗口內部的圖像內存緩沖區(qū))Opencv視頻教程Opencv讀取視頻Opencv讀取視頻代碼#include highgui.hint main(int argc, char* argv)cvNamedWindow(avi);CvCapture* captu

8、re = cvCreateFileCapture(“視頻文件路徑);IplImage* frame;while(1)frame = cvQueryFrame(capture);if(!frame)break;cvShowImage(avi,frame);char c = cvWaitKey(33);if(c=27)break;cvReleaseCapture(&capture);cvDestroyWindow(avi);return 0;結構體CvCaptureCvCapture 是一個結構體,用來保存圖像捕獲所需要的信息。 opencv提供兩種方式從外部捕獲圖像一種是從攝像頭中,一種是通過解

9、碼視頻得到圖像。 兩種方式都必須從第一幀開始一幀一幀的按順序獲取,因此每獲取一幀后都要保存相應的狀態(tài)和參數(shù)。 比如從視頻文件中獲取,需要保存視頻文件的文件名,相應的解碼器類型,下一次如果要獲取將需要解碼哪一幀等。 這些信息都保存在CvCapture結構中,每獲取一幀后,這些信息都將被更新,獲取下一幀需要將新信息傳給獲取的api接口cvCreateFileCapture(char*name)通過輸入要讀取的avi文件的路徑,然后,該函數(shù)返回一個指向CvCapture結構體的指針。cvQueryFrame(capture)輸入一個CvCapture類型的指針,該函數(shù)主要功能是將視頻文件的下一幀加載

10、到內存。與cvLoadImage的不同之處是,該函數(shù)不重新分配內存空間。C=cvWaitKey(33)當前幀被顯示后,等待33毫秒。如果用戶觸發(fā)了一個按鍵,c會被設置成這個按鍵的ASCII碼,否則會被設置成-1。cvWaitKey(33)在此處的另外一個作用是,控制幀率。cvReleaseCapture(&capture)釋放為CvCapture結構體開辟的內存空間關閉打開的AVI文件相關的文件句柄讀取攝像頭只需把cvCreateFileCapture改成cvCreateCameraCapture即可。該函數(shù)的輸入參數(shù)是一個ID號,只有存在多個攝像頭時才起作用。當ID=-1時,表示隨機選擇一個

11、。HighGUI做了很多工作,使得攝像機圖像序列像一個視頻文件一樣。在第4章,會有更詳細的介紹??偨Y常見問題(1)視頻文件路徑沒寫對(2)沒有安裝解碼器(3)如果使用的是Opencv2.0或更高版本,那么,能否正確加載opencv_ffmpeg210.dll(4)盡管是AVI文件,但也可能使用了某種codec,例如:MJPEG Decompressor。 需要把它轉換OpenCV支持的AVI文件. OpenCV支持的AVI。例如使用貍窩全能視頻轉換器,在預置方案處,選擇AVI-Audio_Video Interleaved(*.avi)?;蛘呤褂酶袷焦S也可以。(5)讀攝像頭數(shù)據,需要安裝與攝

12、像頭相應的驅動程序。Opencv視頻教程視頻播放控制獲取攝像頭屬性的函數(shù)double cvGetCaptureProperty( CvCapture* capture, int property_id ) CV_CAP_PROP_POS_MSEC - 影片目前位置,為毫秒數(shù)或者視頻獲取時間戳CV_CAP_PROP_POS_FRAMES - 將被下一步解壓/獲取的幀索引,以0為起點CV_CAP_PROP_POS_AVI_RATIO - 視頻文件的相對位置(0 - 影片的開始,1 - 影片的結尾)CV_CAP_PROP_FRAME_WIDTH - 視頻流中的幀寬度CV_CAP_PROP_FRAME

13、_HEIGHT - 視頻流中的幀高度CV_CAP_PROP_FPS - 幀率CV_CAP_PROP_FOURCC - 表示codec的四個字符CV_CAP_PROP_FRAME_COUNT - 視頻文件中幀的總數(shù) 一個bug有時候函數(shù)cvGetCaptureProperty在cvQueryFrame被調用一次后,再調用cvGetCaptureProperty才會返回正確的數(shù)值。這是一個bug,建議在調用此函數(shù)前先調用cvQueryFrame。 設置攝像頭屬性的函數(shù)int cvSetCaptureProperty( CvCapture* capture, int property_id, dou

14、ble value );capture 視頻獲取結構。property_id 屬性標識符??梢允窍旅嬷唬篊V_CAP_PROP_POS_MSEC - 從文件開始的位置,單位為毫秒CV_CAP_PROP_POS_FRAMES - 單位為幀數(shù)的位置(只對視頻文件有效)CV_CAP_PROP_POS_AVI_RATIO - 視頻文件的相對位置(0 - 影片的開始,1 - 影片的結尾)CV_CAP_PROP_FRAME_WIDTH - 視頻流的幀寬度(只對攝像頭有效)CV_CAP_PROP_FRAME_HEIGHT - 視頻流的幀高度(只對攝像頭有效)CV_CAP_PROP_FPS - 幀率(只對攝

15、像頭有效)CV_CAP_PROP_FOURCC - 表示codec的四個字符(只對攝像頭有效)value 屬性的值。函數(shù)cvSetCaptureProperty設置指定視頻獲取的屬性。目前這個函數(shù)對視頻文件只支持: CV_CAP_PROP_POS_MSEC, CV_CAP_PROP_POS_FRAMES, CV_CAP_PROP_POS_AVI_RATIO 創(chuàng)建滾動條該函數(shù)為開放計算機視覺(OpenCV)庫庫函數(shù),創(chuàng)建trackbar并將它添加到指定的窗口。定義:CV_EXTERN_C_FUNCPTR( void (*CvTrackbarCallback)(int pos) );int cvC

16、reateTrackbar( const char* trackbar_name, const char* window_name, int* value, int count, CvTrackbarCallback on_change ); 創(chuàng)建滾動條參數(shù):trackbar_name被創(chuàng)建的trackbar名字。window_name窗口名字,這個窗口將為被創(chuàng)建trackbar的父對象。value整數(shù)指針,它的值將反映滑塊的位置。這個變量指定創(chuàng)建時的滑塊位置。count滑塊位置的最大值。最小值一直是0。on_change每次滑塊位置被改變的時候,被調用函數(shù)的指針。這個函數(shù)應該被聲明為void

17、 Foo(int); 如果沒有回調函數(shù),這個值可以設為NULL。函數(shù)cvCreateTrackbar用指定的名字和范圍來創(chuàng)建trackbar(滑塊或者范圍控制),指定與trackbar位置同步的變量,并且指定當trackbar位置被改變的時候調用的回調函數(shù)。被創(chuàng)建的trackbar默認顯示在指定窗口的頂端,可以通過函數(shù)cvGetTrackbarPos來獲取trackbar顯示的位置信息,以及通過函數(shù)cvSetTrackbarPos來重新設置trackbar的顯示位置。 回調函數(shù)回調函數(shù)就是一個通過函數(shù)指針調用的函數(shù)。如果你把函數(shù)的指針(地址)作為參數(shù)傳遞給另一個函數(shù),當這個指針被用為調用它所指

18、向的函數(shù)時,我們就說這是回調函數(shù)?;卣{函數(shù)不是由該函數(shù)的實現(xiàn)方直接調用,而是在特定的事件或條件發(fā)生時由另外的一方調用的,用于對該事件或條件進行響應。 Opencv視頻教程Opencv寫視頻文件Opencv寫視頻文件核心函數(shù)cvCreateVideoWritercvWriteFramecvReleaseVideoWritercvCreateVideoWritercvCreateVideoWriter (const char* filename, int fourcc, double fps, CvSize frame_size, int is_color=1 ); filename:指定新建視頻

19、的文件名字。fourcc:視頻壓縮的編碼格式,目前有多種流行的編解碼格式,但無論采用哪種格式,都必須確認自己的電腦上安裝了這種格式(編解碼器的安裝是獨立于opencv的)。fps:幀率,在第4集中有介紹。frame_size:視頻幀的大小。is_color:如果非零,編 碼器將希望得到彩色幀并進行編碼 ,否則,是灰度幀 cvWriteFrame功能:把一幀圖像寫入到視頻文件cvReleaseVideoWriter釋放視頻寫入設備,如果不釋放,會導致寫視頻失敗,所以一定要記得釋放。Opencv視頻教程Opencv基本數(shù)據結構Opencv基本數(shù)據結構cxcore/include/cxtypes.h

20、CvPoint系列CvSize系列CvSizeCvRectCvScalarCvArrCvPoint系列CvPoint:表示圖像中的點(見示意圖)CvPoint2D32f:二維空間中的點CvPoint3D32f:三維空間中的點構造函數(shù):cvPointXXXX( )。注意,這是c風格的代碼,構造函數(shù)是內聯(lián)函數(shù),并不是c+中的類的構造函數(shù)一樣。CvSize系列CvSize:圖像的尺寸CvSize2D32f:如果想用浮點型。CvRect可以用來表示圖像的部分區(qū)域(示意圖)CvScalar包含4個浮點成員,可以用來表示表示B,G,R,alpha。(示意圖)有三個構造函數(shù):cvScalar,cvRealScalar,cvScalarAllCvArrCvArr雖然Opencv1.0是大部分是由C語言完成,但是他使用的結構也是遵循面向對象的思想的。CvMat與IplImage的關系就如同C+中的繼承關系,IplImage可以視為從CvMat派生的。CvArr可以視為抽象類。(例子展示)Opencv視頻教程CvMat結構體

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論