日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

OpenCV捕获视频和摄像头

發(fā)布時間:2025/3/21 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OpenCV捕获视频和摄像头 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

從文件中捕獲視頻

其實(shí)使用OpenCV讀取視頻相當(dāng)簡單,只需要初始化一個VideoCapture對象,打開視頻文件,逐幀讀取。

程序

下面是簡單的OpenCV代碼:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 #include <opencv2\highgui\highgui.hpp> #include <iostream> ? usingnamespace cv; usingnamespace std; ? intmain(intargc,?char**argv) { ????//打開視頻文件 ????VideoCapture cap("Girls'Generation.avi"); ????if(!cap.isOpened()) ????{ ????????cout <<?"不能打開視頻文件"<< endl; ????????return-1; ????} ????//從3000ms開始播放視頻 ????//cap.set(CV_CAP_PROP_POS_MSEC, 3000); ? ????//獲取視頻的幀速率 ????doublefps = cap.get(CV_CAP_PROP_FPS); ????cout <<?"幀/秒:"<< fps << endl; ? ????namedWindow("MyVideo",CV_WINDOW_AUTOSIZE); ????while(true) ????{ ????????Mat frame; ????????//從視頻中讀取一個幀 ????????boolbSuccess = cap.read(frame); ????????if(!bSuccess) ????????{ ????????????cout <<"不能從視頻文件讀取幀"<< endl; ????????????break; ????????} ????????//在MyVideo窗口上顯示當(dāng)前幀 ????????imshow("MyVideo", frame); ????????//如果30ms沒有按下鍵,就返回-1,當(dāng)按下ESC鍵返回27 ????????if(waitKey(30)==27) ????????{ ????????????cout <<?"按下ESC鍵"<< endl; ????????????break; ????????} ????} ? ????return0; }

解釋

1 VideoCapture::VideoCapture(conststring& filename)

這是VideoCapture類為數(shù)不多的構(gòu)造函數(shù)的一個。這個構(gòu)造函數(shù)打開視頻文件并為讀取視頻流初始化VideoCapture對象。
這個類的析構(gòu)函數(shù)會釋放對象關(guān)聯(lián)的所有內(nèi)存。因此,不需要在程序中顯示的釋放內(nèi)存。

1 boolVideoCapture::IsOpened()

如果調(diào)用VideoCapture構(gòu)造函數(shù)成功,這個方法返回true,否則返回false。
檢查VideoCapture初始化是否成功是有必要的。如果失敗,程序應(yīng)該退出,否則當(dāng)從VideoObject中讀取幀的時候,程序就會崩潰了。

1 boolVideoCapture::set(intpropId,?doublevalue)

這個方法改變VideoObject對象的屬性,如果成功,返回true,否則返回false。你應(yīng)該在你的代碼中嘗試修改視頻流的一些屬性。在我的代碼中,我改變了CV_CAP_PROP_POS_MSEC屬性。

它的參數(shù):

  • int propID –?這個參數(shù)指定你要更改的屬性。這個參數(shù)有很多可選項,這里列出一部分。
    • CV_CAP_PROP_POS_MSEC – 視頻的當(dāng)前位置(毫秒)
    • CV_CAP_PROP_POS_FRAMES –?視頻的當(dāng)前位置(幀)
    • CV_CAP_PROP_FRAME_WIDTH – 視頻流的寬度
    • CV_CAP_PROP_FRAME_HEIGHT – 視頻流的高度
    • CV_CAP_PROP_FPS – 幀速率(幀/秒)
    • CV_CAP_PROP_FOURCC?– 編碼器的四字符編碼
  • double value – 給propID分配的值。
1 doubleVideoCapture::get(intpropId)

這個函數(shù)返回指定的propId的屬性值。它的可選項和set函數(shù)的propID一樣。

1 boolVideoCapture::read(Mat& image);

這個函數(shù)抓取視頻的下一幀,解碼并存儲在‘image’變量中。在這個函數(shù)內(nèi)部會調(diào)用VideoCapture::grap()和VideoCapture::retrieve()??梢允褂眠@2個函數(shù)代替VideoCapture::read()函數(shù)。如果操作成功,返回true,否則返回false。

1 waitKey(30)

這個函數(shù)等待30毫秒。如果在指定的時間按下鍵,它會返回鍵的ASCII值。如果這個值是27,程序就會執(zhí)行if塊。如果在30毫秒內(nèi)沒有按下鍵,程序返回-1,程序繼續(xù)while循環(huán)。

1 VideoCapture::~VideoCapture()

VideoCapture對象的析構(gòu)函數(shù)會釋放對象所有關(guān)聯(lián)的內(nèi)存。在程序退出main方法時,析構(gòu)函數(shù)會隱式調(diào)用。

總結(jié)

首先,這個程序從文件中捕獲一個視頻,然后進(jìn)入一個無限循環(huán)。在這個循環(huán)中,它從捕獲的視頻中連續(xù)地抓取幀,解碼,然后顯示在窗口中并等待30毫秒。如果視頻沒有更多的幀或按下了ESC鍵,程序就會跳出無限循環(huán)。

注意:使用waitKey(int)函數(shù)非常重要,因?yàn)閕mshow(string&, MAT)函數(shù)需要時間在窗口上繪制圖像,正是waitKey(int)提供了這個時間。

從攝像頭中采集視頻

程序

下面的程序和上面的最大不同是VideoCapture構(gòu)造函數(shù)的參數(shù)。這里我給VideoCapture的構(gòu)造函數(shù)提供攝像頭的編號來代替一個文件名。下面是OpenCV代碼:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 #include <opencv2\highgui\highgui.hpp> #include <iostream> ? usingnamespace cv; usingnamespace std; ? intmain(intargc,?char**argv) { ????// 打開第1個攝像頭 ????VideoCapture cap(0); ? ????if(!cap.isOpened()) ????{ ????????cout <<?"不能打開攝像頭!"<< endl; ????????return-1; ????} ? ????//獲取視頻幀的寬度 ????doubledWidth = cap.get(CV_CAP_PROP_FRAME_WIDTH); ????//獲取視頻幀的高度 ????doubledHeight = cap.get(CV_CAP_PROP_FRAME_HEIGHT); ? ????cout <<?"視頻幀尺寸 : "<< dWidth <<?" x "<< dHeight << endl; ? ????namedWindow("MyVideo", CV_WINDOW_AUTOSIZE); ? ????while(1) ????{ ????????Mat frame; ? ????????boolbSuccess = cap.read(frame); ? ????????if(!bSuccess) ????????{ ????????????cout <<?"不能從視頻流中讀取幀!"<< endl; ????????????break; ????????} ? ????????imshow("MyVideo", frame); ? ????????if(waitKey(30) == 27) ????????{ ????????????cout <<?"ESC鍵被按下"<< endl; ????????????break; ????????} ????} ????return0; ? }

解釋

1 VideoCapture::VideoCapture(intdevice)

這是VideoCapture 3個構(gòu)造函數(shù)的一個。這個構(gòu)造函數(shù)打開給定編號的攝像頭并為讀取攝像頭的視頻流初始化VideoCapture對象。這里的“0”表示使用編號為0的攝像頭。如果你的電腦上有多個攝像頭,可以使用1,2,3…代替0。

1 doubledWidth = cap.get(CV_CAP_PROP_FRAME_WIDTH)

這個函數(shù)獲取攝像頭輸出幀的寬(像素)

1 doubledHeight = cap.get(CV_CAP_PROP_FRAME_HEIGHT)

這個函數(shù)獲取攝像頭輸出幀的高(像素)

其他所有的函數(shù)都跟第一個程序中一樣。

總結(jié)

以上是生活随笔為你收集整理的OpenCV捕获视频和摄像头的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 极品蜜桃臀肥臀-x88av | 久久国语对白 | 欧美激情一区在线 | 色九九| 日本免费黄视频 | 红色假期黑色婚礼2 | av青娱乐 | 五月激情久久 | 伊人网综合网 | 色哟哟无码精品一区二区三区 | 免费一二区 | 久久av一区 | 日本欧美在线播放 | 男人午夜剧场 | 亚洲一区中文字幕永久在线 | 999精品一区 | 亚洲熟妇av一区二区三区漫画 | 91瑟瑟 | 精品国产丝袜一区二区三区乱码 | 高清视频在线免费观看 | 另类小说亚洲色图 | 国产精品五区 | 女色综合 | 日韩成人精品在线 | 亚洲91精品 | 午夜香蕉 | av资源新版在线天堂 | 日本a级片网站 | youjizz中国少妇 | 国产天堂资源 | 国产三区视频 | 国产午夜精品理论片 | 一级肉体全黄裸片中国 | 91精品又粗又猛又爽 | 国产a不卡 | 日本欧美国产一区二区三区 | 99re这里只有精品6 | 国产精品免费av一区二区 | 国产真实伦对白全集 | av在线.com | 免费毛片一区二区三区 | 国产制服91一区二区三区制服 | 成人观看 | 国产性xxx| 一本大道av伊人久久综合 | 欧美午夜网 | 99re免费视频精品全部 | 丰满人妻av一区二区三区 | 国产又黄又粗又爽 | 久热免费 | 天天操夜夜草 | 91在线精品入口 | 黄色一级片网站 | hs视频在线观看 | 真实偷拍激情啪啪对白 | 人妻aⅴ无码一区二区三区 阿v免费视频 | 红桃视频国产 | 久久精品69 | 视频一区日韩 | 黑人干亚洲女 | 欧美在线视频第一页 | 在线观看一区二区三区视频 | 久久久久久蜜桃 | 国产一级啪啪 | 欧美福利影院 | 麻豆视频在线播放 | 色爱AV综合网国产精品 | 色视频在线观看免费 | 中文字幕麻豆 | av专区在线 | 中文字幕 欧美日韩 | 自拍偷拍欧美日韩 | 亚洲精品九九 | 美女三区| 欧美做受高潮1 | 久热国产精品 | 欧美天天 | 国产高中女学生第一次 | 波多野吉衣一区二区 | 息与子五十路翔田千里 | 黄色a在线观看 | 边吃奶边添下面好爽 | 毛片的网站 | 日韩精品一二三四区 | 国产精品美女在线 | 爱搞逼综合网 | 9999av| 成人理论视频 | 久久好色| 亚洲成av人片一区二区 | 麻豆免费下载 | 中文自拍| 一区二区三区四区日韩 | 成人91网站 | 午夜插插 | a∨鲁丝一区鲁丝二区鲁丝三区 | 污视频网站免费在线观看 | 91精品黄色 | 日韩av一区二区在线播放 |