版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
Opencv視頻教程Opencv結(jié)構(gòu)與內(nèi)容Opencv視頻教程1Opencv結(jié)構(gòu)cxcorecvMachineLearning(ML)HighGUIcvcamcvauxOpencv結(jié)構(gòu)cxcore2cxcore基礎(chǔ)結(jié)構(gòu):CvPoint,CvSize,CvScalar等數(shù)組操作:cvCreateImage,cvCreateMat等動(dòng)態(tài)結(jié)構(gòu):CvMemStorage,CvMemBlock等繪圖函數(shù):cvLine,cvRectangle等數(shù)據(jù)保存和運(yùn)行時(shí)類型信息:CvFileStorage,cvOpenFileStorage等錯(cuò)誤處理和系統(tǒng)函數(shù):cvGetErrStatus,cvAlloc,cvFree等cxcore3cv圖像處理:cvSobel,cvCanny等結(jié)構(gòu)分析:ContourArea等運(yùn)動(dòng)分析與目標(biāo)跟蹤:cvMeanShift等模式識(shí)別:CvHaarFeature攝像頭定標(biāo)與三維重建:cvCalibrateCamer2cv4MachineLearning(ML)包含許多聚類、分類和數(shù)據(jù)分析函數(shù)。如Bayes分類器,K近鄰算法,支持向量機(jī),決策樹,神經(jīng)網(wǎng)絡(luò)等等。MachineLearning(ML)包含許多聚類、分類和5HighGUI圖像界面函數(shù):cvNamedWindow讀圖像和保存圖像:cvLoadImage,cvSaveImage讀視頻和寫視頻:CvCreateFileCapture等HighGUI6cvcam攝像機(jī)接口,在Opencv1.0以后的版本中已經(jīng)被移除cvcam7cvaux該模塊中一般存放一些即將被淘汰的算法和函數(shù)(如基于嵌入式隱馬爾科夫的人臉識(shí)別算法),還包含一些實(shí)驗(yàn)性的算法和函數(shù)(前景檢測,背景剔除等)cvaux8Opencv的結(jié)構(gòu)Opencv的結(jié)構(gòu)9Opencv視頻教程顯示圖像Opencv視頻教程10第一個(gè)程序:顯示圖像基于Opencv,我們可以讀取各種圖像文件,視頻文件,還可以讀取攝像頭。這些功能是Opencv開發(fā)包中HighGUI工具集的一部分。下面,我們就使用其中的一些功能來實(shí)現(xiàn)如何顯示一幅圖像。第一個(gè)程序:顯示圖像基于Opencv,我們可以讀取各種圖像文11顯示圖像代碼#include"highgui.h"intmain(intargc,char*argv[]){ IplImage*src=cvLoadImage("F:\\psbCA2V1GZ7.jpg",1); cvNamedWindow("show_image"); cvShowImage("show_image",src); cvWaitKey(0); return0;}顯示圖像代碼#include"highgui.h"12cvLoadImage(char*filename,intflags=CV_LOAD_IMAGE_COLOR)Filename:圖像所在路徑Flags:/*圖像顏色不變
*/#defineCV_LOAD_IMAGE_UNCHANGED-1/*灰度圖像(單通道)*/#defineCV_LOAD_IMAGE_GRAYSCALE0/*彩色圖像(3通道圖像)*/#defineCV_LOAD_IMAGE_COLOR1cvLoadImage(char*filename,int13cvLoadImage參數(shù)說明Flags:/*則輸入圖像格式可以為8位無符號(hào),16位無符號(hào),32位有符號(hào)或者32位浮點(diǎn)型*/#defineCV_LOAD_IMAGE_ANYDEPTH2/*保持原樣*/#defineCV_LOAD_IMAGE_ANYCOLOR4cvLoadImage參數(shù)說明14cvLoadImage參數(shù)說明如果想要載入最真實(shí)的圖像,選擇CV_LOAD_IMAGE_ANYDEPTH|CV_LOAD_IMAGE_ANYCOLOR
如果輸入有沖突的標(biāo)志,將采用較小的數(shù)字值。比如CV_LOAD_IMAGE_GRAYSCALE|CV_LOAD_IMAGE_COLOR將載入單通道圖。
cvLoadImage參數(shù)說明如果想要載入最真實(shí)的圖像,選擇15cvLoadImage的功能通過文件名確定被加載圖像的格式,并且該函數(shù)在內(nèi)部分配圖像數(shù)據(jù)結(jié)構(gòu)所需要的內(nèi)存空間。支持的圖像格式:BMP,DIB,JPEG,JPE,PNG,PBM,PGM,PPM,SR,RAS,TIFF。cvLoadImage的功能16IntcvNamedWindow(char*name,intflagsname:窗口的標(biāo)志。如果已經(jīng)有同名窗口,則該函數(shù)什么也不干。Flags:CV_WINDOW_AUTOSIZE,會(huì)根據(jù)圖像大小自動(dòng)調(diào)整窗口大小。如果是0,則窗口大小不變。IntcvNamedWindow(char*name,in17cvShowImage(char*name,IplImage*dst)功能:在指定窗口上顯示圖像。name:窗口的標(biāo)志。這個(gè)標(biāo)志是cvNamedWindow函數(shù)設(shè)定的。dst:被顯示的圖像。cvShowImage(char*name,IplImag18IntcvWaitKey(intkey)Key:如果key的值是大于0的數(shù),那么該函數(shù)的功能是,在此處暫停key毫秒。如果是小于等于0的數(shù),那么,該函數(shù)是在等待用戶的按鍵輸入。IntcvWaitKey(intkey)Key:如果ke19cvReleaseImage(IplImage**src)釋放圖像空間。cvReleaseImage(IplImage**src)20cvDestroyWindow(char*name)注銷一個(gè)窗口。同時(shí)釋放為該窗口所分配的所有內(nèi)存(包括窗口內(nèi)部的圖像內(nèi)存緩沖區(qū))cvDestroyWindow(char*name)注銷一21Opencv視頻教程Opencv讀取視頻Opencv視頻教程22Opencv讀取視頻代碼#include"highgui.h"intmain(intargc,char*argv[]){ cvNamedWindow("avi"); CvCapture*capture=cvCreateFileCapture(“視頻文件路徑"); IplImage*frame; while(1) { frame=cvQueryFrame(capture); if(!frame)break; cvShowImage("avi",frame); charc=cvWaitKey(33); if(c==27) break; } cvReleaseCapture(&capture); cvDestroyWindow("avi"); return0;}Opencv讀取視頻代碼#include"highgui.23結(jié)構(gòu)體CvCaptureCvCapture是一個(gè)結(jié)構(gòu)體,用來保存圖像捕獲所需要的信息。opencv提供兩種方式從外部捕獲圖像一種是從攝像頭中,一種是通過解碼視頻得到圖像。兩種方式都必須從第一幀開始一幀一幀的按順序獲取,因此每獲取一幀后都要保存相應(yīng)的狀態(tài)和參數(shù)。比如從視頻文件中獲取,需要保存視頻文件的文件名,相應(yīng)的解碼器類型,下一次如果要獲取將需要解碼哪一幀等。這些信息都保存在CvCapture結(jié)構(gòu)中,每獲取一幀后,這些信息都將被更新,獲取下一幀需要將新信息傳給獲取的api接口結(jié)構(gòu)體CvCaptureCvCapture是一個(gè)結(jié)構(gòu)體,用24cvCreateFileCapture(char*name)通過輸入要讀取的avi文件的路徑,然后,該函數(shù)返回一個(gè)指向CvCapture結(jié)構(gòu)體的指針。cvCreateFileCapture(char*name)25cvQueryFrame(capture)輸入一個(gè)CvCapture類型的指針,該函數(shù)主要功能是將視頻文件的下一幀加載到內(nèi)存。與cvLoadImage的不同之處是,該函數(shù)不重新分配內(nèi)存空間。cvQueryFrame(capture)輸入一個(gè)CvCap26C=cvWaitKey(33)當(dāng)前幀被顯示后,等待33毫秒。如果用戶觸發(fā)了一個(gè)按鍵,c會(huì)被設(shè)置成這個(gè)按鍵的ASCII碼,否則會(huì)被設(shè)置成-1。cvWaitKey(33)在此處的另外一個(gè)作用是,控制幀率。C=cvWaitKey(33)當(dāng)前幀被顯示后,等待33毫秒。27cvReleaseCapture(&capture)釋放為CvCapture結(jié)構(gòu)體開辟的內(nèi)存空間關(guān)閉打開的AVI文件相關(guān)的文件句柄cvReleaseCapture(&capture)28讀取攝像頭只需把cvCreateFileCapture改成cvCreateCameraCapture即可。該函數(shù)的輸入?yún)?shù)是一個(gè)ID號(hào),只有存在多個(gè)攝像頭時(shí)才起作用。當(dāng)ID=-1時(shí),表示隨機(jī)選擇一個(gè)。HighGUI做了很多工作,使得攝像機(jī)圖像序列像一個(gè)視頻文件一樣。在第4章,會(huì)有更詳細(xì)的介紹。讀取攝像頭29總結(jié)總結(jié)30常見問題(1)視頻文件路徑?jīng)]寫對(duì)(2)沒有安裝解碼器(3)如果使用的是Opencv2.0或更高版本,那么,能否正確加載opencv_ffmpeg210.dll(4)盡管是AVI文件,但也可能使用了某種codec,例如:MJPEGDecompressor。需要把它轉(zhuǎn)換OpenCV支持的AVI文件.OpenCV支持的AVI。例如使用貍窩全能視頻轉(zhuǎn)換器,在《預(yù)置方案》處,選擇AVI-Audio_VideoInterleaved(*.avi)?;蛘呤褂酶袷焦S也可以。(5)讀攝像頭數(shù)據(jù),需要安裝與攝像頭相應(yīng)的驅(qū)動(dòng)程序。常見問題(1)視頻文件路徑?jīng)]寫對(duì)31Opencv視頻教程視頻播放控制Opencv視頻教程32獲取攝像頭屬性的函數(shù)doublecvGetCaptureProperty(CvCapture*capture,intproperty_id)
CV_CAP_PROP_POS_MSEC-影片目前位置,為毫秒數(shù)或者視頻獲取時(shí)間戳
CV_CAP_PROP_POS_FRAMES-將被下一步解壓/獲取的幀索引,以0為起點(diǎn)
CV_CAP_PROP_POS_AVI_RATIO-視頻文件的相對(duì)位置(0-影片的開始,1-影片的結(jié)尾)
CV_CAP_PROP_FRAME_WIDTH-視頻流中的幀寬度
CV_CAP_PROP_FRAME_HEIGHT-視頻流中的幀高度
CV_CAP_PROP_FPS-幀率
CV_CAP_PROP_FOURCC-表示codec的四個(gè)字符
CV_CAP_PROP_FRAME_COUNT-視頻文件中幀的總數(shù)獲取攝像頭屬性的函數(shù)doublecvGetCaptureP33一個(gè)bug有時(shí)候函數(shù)cvGetCaptureProperty在cvQueryFrame被調(diào)用一次后,再調(diào)用cvGetCaptureProperty才會(huì)返回正確的數(shù)值。這是一個(gè)bug,建議在調(diào)用此函數(shù)前先調(diào)用cvQueryFrame。
一個(gè)bug有時(shí)候函數(shù)cvGetCaptureProperty34設(shè)置攝像頭屬性的函數(shù)intcvSetCaptureProperty(CvCapture*capture,intproperty_id,doublevalue);
capture視頻獲取結(jié)構(gòu)。
property_id屬性標(biāo)識(shí)符??梢允窍旅嬷唬?/p>
CV_CAP_PROP_POS_MSEC-從文件開始的位置,單位為毫秒
CV_CAP_PROP_POS_FRAMES-單位為幀數(shù)的位置(只對(duì)視頻文件有效)
CV_CAP_PROP_POS_AVI_RATIO-視頻文件的相對(duì)位置(0-影片的開始,1-影片的結(jié)尾)
CV_CAP_PROP_FRAME_WIDTH-視頻流的幀寬度(只對(duì)攝像頭有效)
CV_CAP_PROP_FRAME_HEIGHT-視頻流的幀高度(只對(duì)攝像頭有效)
CV_CAP_PROP_FPS-幀率(只對(duì)攝像頭有效)
CV_CAP_PROP_FOURCC-表示codec的四個(gè)字符(只對(duì)攝像頭有效)value屬性的值。函數(shù)cvSetCaptureProperty設(shè)置指定視頻獲取的屬性。目前這個(gè)函數(shù)對(duì)視頻文件只支持:CV_CAP_PROP_POS_MSEC,CV_CAP_PROP_POS_FRAMES,CV_CAP_PROP_POS_AVI_RATIO設(shè)置攝像頭屬性的函數(shù)35創(chuàng)建滾動(dòng)條該函數(shù)為開放計(jì)算機(jī)視覺(OpenCV)庫庫函數(shù),創(chuàng)建trackbar并將它添加到指定的窗口。
定義:
CV_EXTERN_C_FUNCPTR(void(*CvTrackbarCallback)(intpos));
intcvCreateTrackbar(constchar*trackbar_name,constchar*window_name,int*value,intcount,CvTrackbarCallbackon_change);
創(chuàng)建滾動(dòng)條該函數(shù)為開放計(jì)算機(jī)視覺(OpenCV)庫庫函數(shù),36創(chuàng)建滾動(dòng)條參數(shù):
trackbar_name
被創(chuàng)建的trackbar名字。
window_name
窗口名字,這個(gè)窗口將為被創(chuàng)建trackbar的父對(duì)象。
value
整數(shù)指針,它的值將反映滑塊的位置。這個(gè)變量指定創(chuàng)建時(shí)的滑塊位置。
count
滑塊位置的最大值。最小值一直是0。
on_change
每次滑塊位置被改變的時(shí)候,被調(diào)用函數(shù)的指針。這個(gè)函數(shù)應(yīng)該被聲明為voidFoo(int);如果沒有回調(diào)函數(shù),這個(gè)值可以設(shè)為NULL。函數(shù)cvCreateTrackbar用指定的名字和范圍來創(chuàng)建trackbar(滑塊或者范圍控制),指定與trackbar位置同步的變量,并且指定當(dāng)trackbar位置被改變的時(shí)候調(diào)用的回調(diào)函數(shù)。被創(chuàng)建的trackbar默認(rèn)顯示在指定窗口的頂端,可以通過函數(shù)cvGetTrackbarPos來獲取trackbar顯示的位置信息,以及通過函數(shù)cvSetTrackbarPos來重新設(shè)置trackbar的顯示位置。
創(chuàng)建滾動(dòng)條參數(shù):37回調(diào)函數(shù)回調(diào)函數(shù)就是一個(gè)通過函數(shù)指針調(diào)用的函數(shù)。如果你把函數(shù)的指針(地址)作為參數(shù)傳遞給另一個(gè)函數(shù),當(dāng)這個(gè)指針被用為調(diào)用它所指向的函數(shù)時(shí),我們就說這是回調(diào)函數(shù)?;卣{(diào)函數(shù)不是由該函數(shù)的實(shí)現(xiàn)方直接調(diào)用,而是在特定的事件或條件發(fā)生時(shí)由另外的一方調(diào)用的,用于對(duì)該事件或條件進(jìn)行響應(yīng)。
回調(diào)函數(shù)38Opencv視頻教程Opencv寫視頻文件Opencv視頻教程39Opencv寫視頻文件核心函數(shù)cvCreateVideoWritercvWriteFramecvReleaseVideoWriterOpencv寫視頻文件核心函數(shù)cvCreateVideoWr40cvCreateVideoWritercvCreateVideoWriter(constchar*filename,intfourcc,doublefps,CvSizeframe_size,intis_color=1);
filename:指定新建視頻的文件名字。fourcc:視頻壓縮的編碼格式,目前有多種流行的編解碼格式,但無論采用哪種格式,都必須確認(rèn)自己的電腦上安裝了這種格式(編解碼器的安裝是獨(dú)立于opencv的)。fps:幀率,在第4集中有介紹。frame_size:視頻幀的大小。is_color:如果非零,編碼器將希望得到彩色幀并進(jìn)行編碼
,否則,是灰度幀cvCreateVideoWritercvCreateVid41cvWriteFrame功能:把一幀圖像寫入到視頻文件cvWriteFrame42cvReleaseVideoWriter釋放視頻寫入設(shè)備,如果不釋放,會(huì)導(dǎo)致寫視頻失敗,所以一定要記得釋放。cvReleaseVideoWriter釋放視頻寫入設(shè)備,如43Opencv視頻教程Opencv基本數(shù)據(jù)結(jié)構(gòu)Opencv視頻教程44Opencv基本數(shù)據(jù)結(jié)構(gòu)cxcore/include/cxtypes.hCvPoint系列CvSize系列CvSizeCvRectCvScalarCvArrOpencv基本數(shù)據(jù)結(jié)構(gòu)cxcore/include/cxt45CvPoint系列CvPoint:表示圖像中的點(diǎn)(見示意圖)CvPoint2D32f:二維空間中的點(diǎn)CvPoint3D32f:三維空間中的點(diǎn)構(gòu)造函數(shù):cvPointXXXX()。注意,這是c風(fēng)格的代碼,構(gòu)造函數(shù)是內(nèi)聯(lián)函數(shù),并不是c++中的類的構(gòu)造函數(shù)一樣。CvPoint系列46CvSize系列CvSize:圖像的尺寸CvSize2D32f:如果想用浮點(diǎn)型。CvSize系列47CvRect可以用來表示圖像的部分區(qū)域(示意圖)CvRect可以用來表示圖像的部分區(qū)域(示意圖)48CvScalar包含4個(gè)浮點(diǎn)成員,可以用來表示表示B,G,R,alpha。(示意圖)有三個(gè)構(gòu)造函數(shù):cvScalar,cvRealScalar,cvScalarAllCvScalar49CvArrCvArr50CvArr雖然Opencv1.0是大部分是由C語言完成,但是他使用的結(jié)構(gòu)也是遵循面向?qū)ο蟮乃枷氲?。CvMat與IplImage的關(guān)系就如同C++中的繼承關(guān)系,IplImage可以視為從CvMat派生的。CvArr可以視為抽象類。(例子展示)CvArr51Opencv視頻教程CvMat結(jié)構(gòu)體Opencv視頻教程52CvMat結(jié)構(gòu)體定義typedefstructCvMat{inttype;intstep;/*forinternaluseonly*/int*refcount;inthdr_refcount;union{uchar*ptr;short*s;int*i;float*fl;double*db;}data;#ifdef__cplusplusunion{introws;intheight;};union{intcols;intwidth;};#elseintrows;intcols;#endif}CvMat;CvMat結(jié)構(gòu)體定義typedefstructCvMat53創(chuàng)建一個(gè)矩陣,方式一cvCreateMat(introws,intcols,inttype)Type可以使任何預(yù)定義類型。Type的寫法規(guī)則:CV_<bit_depth>(S|U|F)C<number_of_channels。創(chuàng)建一個(gè)矩陣,方式一54創(chuàng)建一個(gè)矩陣,方式二cvCreateMatHeader()函數(shù)創(chuàng)建CvMat結(jié)構(gòu)體,不分配數(shù)據(jù)內(nèi)存cvCreateData()函數(shù)分配數(shù)據(jù)需要的內(nèi)存創(chuàng)建一個(gè)矩陣,方式二55從數(shù)組創(chuàng)建矩陣,方式三cvInitMatHeader()函數(shù),在已有的CvMat結(jié)構(gòu)體上初始化矩陣。從數(shù)組創(chuàng)建矩陣,方式三cvInitMatHeader()函數(shù)56克隆矩陣,方式四cvCloneMat(),該函數(shù)依據(jù)現(xiàn)有矩陣克隆一個(gè)矩陣,分配了獨(dú)立的空間,需要使用cvReleaseMat()釋放??寺【仃嚕绞剿?7獲取矩陣的相關(guān)屬性獲取矩陣的數(shù)據(jù)類型:cvGetElemType獲取矩陣的通道數(shù)(維度):cvGetDims獲取矩陣某一個(gè)維度上的大小:cvGetDimSize二維矩陣獲取矩陣大?。篶vGetSize獲取矩陣的相關(guān)屬性獲取矩陣的數(shù)據(jù)類型:cvGetElemTy58Opencv視頻教程Opencv結(jié)構(gòu)與內(nèi)容Opencv視頻教程59Opencv結(jié)構(gòu)cxcorecvMachineLearning(ML)HighGUIcvcamcvauxOpencv結(jié)構(gòu)cxcore60cxcore基礎(chǔ)結(jié)構(gòu):CvPoint,CvSize,CvScalar等數(shù)組操作:cvCreateImage,cvCreateMat等動(dòng)態(tài)結(jié)構(gòu):CvMemStorage,CvMemBlock等繪圖函數(shù):cvLine,cvRectangle等數(shù)據(jù)保存和運(yùn)行時(shí)類型信息:CvFileStorage,cvOpenFileStorage等錯(cuò)誤處理和系統(tǒng)函數(shù):cvGetErrStatus,cvAlloc,cvFree等cxcore61cv圖像處理:cvSobel,cvCanny等結(jié)構(gòu)分析:ContourArea等運(yùn)動(dòng)分析與目標(biāo)跟蹤:cvMeanShift等模式識(shí)別:CvHaarFeature攝像頭定標(biāo)與三維重建:cvCalibrateCamer2cv62MachineLearning(ML)包含許多聚類、分類和數(shù)據(jù)分析函數(shù)。如Bayes分類器,K近鄰算法,支持向量機(jī),決策樹,神經(jīng)網(wǎng)絡(luò)等等。MachineLearning(ML)包含許多聚類、分類和63HighGUI圖像界面函數(shù):cvNamedWindow讀圖像和保存圖像:cvLoadImage,cvSaveImage讀視頻和寫視頻:CvCreateFileCapture等HighGUI64cvcam攝像機(jī)接口,在Opencv1.0以后的版本中已經(jīng)被移除cvcam65cvaux該模塊中一般存放一些即將被淘汰的算法和函數(shù)(如基于嵌入式隱馬爾科夫的人臉識(shí)別算法),還包含一些實(shí)驗(yàn)性的算法和函數(shù)(前景檢測,背景剔除等)cvaux66Opencv的結(jié)構(gòu)Opencv的結(jié)構(gòu)67Opencv視頻教程顯示圖像Opencv視頻教程68第一個(gè)程序:顯示圖像基于Opencv,我們可以讀取各種圖像文件,視頻文件,還可以讀取攝像頭。這些功能是Opencv開發(fā)包中HighGUI工具集的一部分。下面,我們就使用其中的一些功能來實(shí)現(xiàn)如何顯示一幅圖像。第一個(gè)程序:顯示圖像基于Opencv,我們可以讀取各種圖像文69顯示圖像代碼#include"highgui.h"intmain(intargc,char*argv[]){ IplImage*src=cvLoadImage("F:\\psbCA2V1GZ7.jpg",1); cvNamedWindow("show_image"); cvShowImage("show_image",src); cvWaitKey(0); return0;}顯示圖像代碼#include"highgui.h"70cvLoadImage(char*filename,intflags=CV_LOAD_IMAGE_COLOR)Filename:圖像所在路徑Flags:/*圖像顏色不變
*/#defineCV_LOAD_IMAGE_UNCHANGED-1/*灰度圖像(單通道)*/#defineCV_LOAD_IMAGE_GRAYSCALE0/*彩色圖像(3通道圖像)*/#defineCV_LOAD_IMAGE_COLOR1cvLoadImage(char*filename,int71cvLoadImage參數(shù)說明Flags:/*則輸入圖像格式可以為8位無符號(hào),16位無符號(hào),32位有符號(hào)或者32位浮點(diǎn)型*/#defineCV_LOAD_IMAGE_ANYDEPTH2/*保持原樣*/#defineCV_LOAD_IMAGE_ANYCOLOR4cvLoadImage參數(shù)說明72cvLoadImage參數(shù)說明如果想要載入最真實(shí)的圖像,選擇CV_LOAD_IMAGE_ANYDEPTH|CV_LOAD_IMAGE_ANYCOLOR
如果輸入有沖突的標(biāo)志,將采用較小的數(shù)字值。比如CV_LOAD_IMAGE_GRAYSCALE|CV_LOAD_IMAGE_COLOR將載入單通道圖。
cvLoadImage參數(shù)說明如果想要載入最真實(shí)的圖像,選擇73cvLoadImage的功能通過文件名確定被加載圖像的格式,并且該函數(shù)在內(nèi)部分配圖像數(shù)據(jù)結(jié)構(gòu)所需要的內(nèi)存空間。支持的圖像格式:BMP,DIB,JPEG,JPE,PNG,PBM,PGM,PPM,SR,RAS,TIFF。cvLoadImage的功能74IntcvNamedWindow(char*name,intflagsname:窗口的標(biāo)志。如果已經(jīng)有同名窗口,則該函數(shù)什么也不干。Flags:CV_WINDOW_AUTOSIZE,會(huì)根據(jù)圖像大小自動(dòng)調(diào)整窗口大小。如果是0,則窗口大小不變。IntcvNamedWindow(char*name,in75cvShowImage(char*name,IplImage*dst)功能:在指定窗口上顯示圖像。name:窗口的標(biāo)志。這個(gè)標(biāo)志是cvNamedWindow函數(shù)設(shè)定的。dst:被顯示的圖像。cvShowImage(char*name,IplImag76IntcvWaitKey(intkey)Key:如果key的值是大于0的數(shù),那么該函數(shù)的功能是,在此處暫停key毫秒。如果是小于等于0的數(shù),那么,該函數(shù)是在等待用戶的按鍵輸入。IntcvWaitKey(intkey)Key:如果ke77cvReleaseImage(IplImage**src)釋放圖像空間。cvReleaseImage(IplImage**src)78cvDestroyWindow(char*name)注銷一個(gè)窗口。同時(shí)釋放為該窗口所分配的所有內(nèi)存(包括窗口內(nèi)部的圖像內(nèi)存緩沖區(qū))cvDestroyWindow(char*name)注銷一79Opencv視頻教程Opencv讀取視頻Opencv視頻教程80Opencv讀取視頻代碼#include"highgui.h"intmain(intargc,char*argv[]){ cvNamedWindow("avi"); CvCapture*capture=cvCreateFileCapture(“視頻文件路徑"); IplImage*frame; while(1) { frame=cvQueryFrame(capture); if(!frame)break; cvShowImage("avi",frame); charc=cvWaitKey(33); if(c==27) break; } cvReleaseCapture(&capture); cvDestroyWindow("avi"); return0;}Opencv讀取視頻代碼#include"highgui.81結(jié)構(gòu)體CvCaptureCvCapture是一個(gè)結(jié)構(gòu)體,用來保存圖像捕獲所需要的信息。opencv提供兩種方式從外部捕獲圖像一種是從攝像頭中,一種是通過解碼視頻得到圖像。兩種方式都必須從第一幀開始一幀一幀的按順序獲取,因此每獲取一幀后都要保存相應(yīng)的狀態(tài)和參數(shù)。比如從視頻文件中獲取,需要保存視頻文件的文件名,相應(yīng)的解碼器類型,下一次如果要獲取將需要解碼哪一幀等。這些信息都保存在CvCapture結(jié)構(gòu)中,每獲取一幀后,這些信息都將被更新,獲取下一幀需要將新信息傳給獲取的api接口結(jié)構(gòu)體CvCaptureCvCapture是一個(gè)結(jié)構(gòu)體,用82cvCreateFileCapture(char*name)通過輸入要讀取的avi文件的路徑,然后,該函數(shù)返回一個(gè)指向CvCapture結(jié)構(gòu)體的指針。cvCreateFileCapture(char*name)83cvQueryFrame(capture)輸入一個(gè)CvCapture類型的指針,該函數(shù)主要功能是將視頻文件的下一幀加載到內(nèi)存。與cvLoadImage的不同之處是,該函數(shù)不重新分配內(nèi)存空間。cvQueryFrame(capture)輸入一個(gè)CvCap84C=cvWaitKey(33)當(dāng)前幀被顯示后,等待33毫秒。如果用戶觸發(fā)了一個(gè)按鍵,c會(huì)被設(shè)置成這個(gè)按鍵的ASCII碼,否則會(huì)被設(shè)置成-1。cvWaitKey(33)在此處的另外一個(gè)作用是,控制幀率。C=cvWaitKey(33)當(dāng)前幀被顯示后,等待33毫秒。85cvReleaseCapture(&capture)釋放為CvCapture結(jié)構(gòu)體開辟的內(nèi)存空間關(guān)閉打開的AVI文件相關(guān)的文件句柄cvReleaseCapture(&capture)86讀取攝像頭只需把cvCreateFileCapture改成cvCreateCameraCapture即可。該函數(shù)的輸入?yún)?shù)是一個(gè)ID號(hào),只有存在多個(gè)攝像頭時(shí)才起作用。當(dāng)ID=-1時(shí),表示隨機(jī)選擇一個(gè)。HighGUI做了很多工作,使得攝像機(jī)圖像序列像一個(gè)視頻文件一樣。在第4章,會(huì)有更詳細(xì)的介紹。讀取攝像頭87總結(jié)總結(jié)88常見問題(1)視頻文件路徑?jīng)]寫對(duì)(2)沒有安裝解碼器(3)如果使用的是Opencv2.0或更高版本,那么,能否正確加載opencv_ffmpeg210.dll(4)盡管是AVI文件,但也可能使用了某種codec,例如:MJPEGDecompressor。需要把它轉(zhuǎn)換OpenCV支持的AVI文件.OpenCV支持的AVI。例如使用貍窩全能視頻轉(zhuǎn)換器,在《預(yù)置方案》處,選擇AVI-Audio_VideoInterleaved(*.avi)?;蛘呤褂酶袷焦S也可以。(5)讀攝像頭數(shù)據(jù),需要安裝與攝像頭相應(yīng)的驅(qū)動(dòng)程序。常見問題(1)視頻文件路徑?jīng)]寫對(duì)89Opencv視頻教程視頻播放控制Opencv視頻教程90獲取攝像頭屬性的函數(shù)doublecvGetCaptureProperty(CvCapture*capture,intproperty_id)
CV_CAP_PROP_POS_MSEC-影片目前位置,為毫秒數(shù)或者視頻獲取時(shí)間戳
CV_CAP_PROP_POS_FRAMES-將被下一步解壓/獲取的幀索引,以0為起點(diǎn)
CV_CAP_PROP_POS_AVI_RATIO-視頻文件的相對(duì)位置(0-影片的開始,1-影片的結(jié)尾)
CV_CAP_PROP_FRAME_WIDTH-視頻流中的幀寬度
CV_CAP_PROP_FRAME_HEIGHT-視頻流中的幀高度
CV_CAP_PROP_FPS-幀率
CV_CAP_PROP_FOURCC-表示codec的四個(gè)字符
CV_CAP_PROP_FRAME_COUNT-視頻文件中幀的總數(shù)獲取攝像頭屬性的函數(shù)doublecvGetCaptureP91一個(gè)bug有時(shí)候函數(shù)cvGetCaptureProperty在cvQueryFrame被調(diào)用一次后,再調(diào)用cvGetCaptureProperty才會(huì)返回正確的數(shù)值。這是一個(gè)bug,建議在調(diào)用此函數(shù)前先調(diào)用cvQueryFrame。
一個(gè)bug有時(shí)候函數(shù)cvGetCaptureProperty92設(shè)置攝像頭屬性的函數(shù)intcvSetCaptureProperty(CvCapture*capture,intproperty_id,doublevalue);
capture視頻獲取結(jié)構(gòu)。
property_id屬性標(biāo)識(shí)符??梢允窍旅嬷唬?/p>
CV_CAP_PROP_POS_MSEC-從文件開始的位置,單位為毫秒
CV_CAP_PROP_POS_FRAMES-單位為幀數(shù)的位置(只對(duì)視頻文件有效)
CV_CAP_PROP_POS_AVI_RATIO-視頻文件的相對(duì)位置(0-影片的開始,1-影片的結(jié)尾)
CV_CAP_PROP_FRAME_WIDTH-視頻流的幀寬度(只對(duì)攝像頭有效)
CV_CAP_PROP_FRAME_HEIGHT-視頻流的幀高度(只對(duì)攝像頭有效)
CV_CAP_PROP_FPS-幀率(只對(duì)攝像頭有效)
CV_CAP_PROP_FOURCC-表示codec的四個(gè)字符(只對(duì)攝像頭有效)value屬性的值。函數(shù)cvSetCaptureProperty設(shè)置指定視頻獲取的屬性。目前這個(gè)函數(shù)對(duì)視頻文件只支持:CV_CAP_PROP_POS_MSEC,CV_CAP_PROP_POS_FRAMES,CV_CAP_PROP_POS_AVI_RATIO設(shè)置攝像頭屬性的函數(shù)93創(chuàng)建滾動(dòng)條該函數(shù)為開放計(jì)算機(jī)視覺(OpenCV)庫庫函數(shù),創(chuàng)建trackbar并將它添加到指定的窗口。
定義:
CV_EXTERN_C_FUNCPTR(void(*CvTrackbarCallback)(intpos));
intcvCreateTrackbar(constchar*trackbar_name,constchar*window_name,int*value,intcount,CvTrackbarCallbackon_change);
創(chuàng)建滾動(dòng)條該函數(shù)為開放計(jì)算機(jī)視覺(OpenCV)庫庫函數(shù),94創(chuàng)建滾動(dòng)條參數(shù):
trackbar_name
被創(chuàng)建的trackbar名字。
window_name
窗口名字,這個(gè)窗口將為被創(chuàng)建trackbar的父對(duì)象。
value
整數(shù)指針,它的值將反映滑塊的位置。這個(gè)變量指定創(chuàng)建時(shí)的滑塊位置。
count
滑塊位置的最大值。最小值一直是0。
on_change
每次滑塊位置被改變的時(shí)候,被調(diào)用函數(shù)的指針。這個(gè)函數(shù)應(yīng)該被聲明為voidFoo(int);如果沒有回調(diào)函數(shù),這個(gè)值可以設(shè)為NULL。函數(shù)cvCreateTrackbar用指定的名字和范圍來創(chuàng)建trackbar(滑塊或者范圍控制),指定與trackbar位置同步的變量,并且指定當(dāng)trackbar位置被改變的時(shí)候調(diào)用的回調(diào)函數(shù)。被創(chuàng)建的trackbar默認(rèn)顯示在指定窗口的頂端,可以通過函數(shù)cvGetTrackbarPos來獲取trackbar顯示的位置信息,以及通過函數(shù)cvSetTrackbarPos來重新設(shè)置trackbar的顯示位置。
創(chuàng)建滾動(dòng)條參數(shù):95回調(diào)函數(shù)回調(diào)函數(shù)就是一個(gè)通過函數(shù)指針調(diào)用的函數(shù)。如果你把函數(shù)的指針(地址)作為參數(shù)傳遞給另一個(gè)函數(shù),當(dāng)這個(gè)指針被用為調(diào)用它所指向的函數(shù)時(shí),我們就說這是回調(diào)函數(shù)?;卣{(diào)函數(shù)不是由該函數(shù)的實(shí)現(xiàn)方直接調(diào)用,而是在特定的事件或條件發(fā)生時(shí)由另外的一方調(diào)用的,用于對(duì)該事件或條件進(jìn)行響應(yīng)。
回調(diào)函數(shù)96Opencv視頻教程Opencv寫視頻文件Opencv視頻教程97Opencv寫視頻文件核心函數(shù)cvCreateVideoWritercvWriteFramecvReleaseVideoWriterOpencv寫視頻文件核心函數(shù)cvCreateVideoWr98cvCreateVideoWritercvCreateVideoWriter(constchar*filename,intfourcc,doublefps,CvSizeframe_size,intis_color=1);
filename:指定新建視頻的文件名字。fourcc:視頻壓縮的編碼格式,目前有多種流行的編解碼格式,但無論采用哪種格式,都必須確認(rèn)自己的電腦上安裝了這種格式(編解碼器的安裝是獨(dú)立于opencv的)。fps:幀率,在第4集中有介紹。frame_size:視頻幀的大小。is_color:如果非零,編碼器將希望得到彩色幀并進(jìn)行編碼
,否則,是灰度幀cvCreateVideoWritercvCreateVid99cvWriteFrame功能:把一幀圖像寫入到視頻文件cvWriteFrame100cvReleaseVideoWriter釋放視頻寫入設(shè)備,如果不釋放,會(huì)導(dǎo)致寫視頻失敗,所以一定要記得釋放。cvRe
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 設(shè)備維護(hù)助理工作總結(jié)
- XXX電子科技有限公司員工安全手冊(cè)(安全操作規(guī)程)
- 2025-2030全球汽車主動(dòng)夜視系統(tǒng)行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025年全球及中國臺(tái)式振動(dòng)臺(tái)行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報(bào)告
- 2025-2030全球監(jiān)視雷達(dá)系統(tǒng)行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025-2030全球碳納米粉行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025年全球及中國三重四級(jí)桿液質(zhì)聯(lián)用儀行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報(bào)告
- 2025-2030全球DRM數(shù)字版權(quán)保護(hù)技術(shù)行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025年全球及中國細(xì)胞活力檢測試劑盒行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報(bào)告
- 2025-2030全球可重復(fù)使用墊料氣囊行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2024年決戰(zhàn)行測5000題言語理解與表達(dá)(培優(yōu)b卷)
- 中國游戲發(fā)展史課件
- 2025年慢性阻塞性肺疾病全球創(chuàng)議GOLD指南修訂解讀課件
- 第三單元名著導(dǎo)讀《駱駝祥子》整本書閱讀教學(xué)設(shè)計(jì)+2023-2024學(xué)年統(tǒng)編版語文七年級(jí)下冊(cè)
- 工程數(shù)學(xué)試卷及答案
- 《PLC應(yīng)用技術(shù)(西門子S7-1200)第二版》全套教學(xué)課件
- 第01講 直線的方程(九大題型)(練習(xí))
- 市政道路監(jiān)理大綱34368
- 《基礎(chǔ)會(huì)計(jì)》教學(xué)課件-整套教程電子講義
- 人教版七年級(jí)上冊(cè)數(shù)學(xué)全冊(cè)課時(shí)練習(xí)帶答案
- GB/T 44143-2024科技人才評(píng)價(jià)規(guī)范
評(píng)論
0/150
提交評(píng)論