在參加一個軟件比賽需要用opencv對視頻的處理,也碰到了一些問題。
最常見的就是視頻一閃而過了,在網上查了好久都沒解決,
最后重裝在配置環境變量時發現的。
現在我來終結一下估計是比較全的了。
先說明我用的是vs2012+opencv(2.4.8),c++編程;
關于配置就不說了網上很多
代碼如下:
?
#include"highgui.h" #include"cv.h" //聲明一個CvCapture類型指針 用于接收cvCreateFileCapture的返回值 CvCapture* g_capture = NULL; //記錄滾動條的當前位置 int g_slider_pos = 0 ; //對視頻幀進行計數的變量 int frame_count = 0; //滾動條的回調函數 參數int pos 是指當前滾動條所在位置 void on_changed(int pos) { //設置g_capture的屬性 使得 從位置pos開始播放視頻 cvSetCaptureProperty(g_capture,CV_CAP_PROP_POS_FRAMES,pos); //在拉動滾動條后 保持變量frame_count與滾動條的位置是同步的 frame_count = pos ; } int main(int argc,char* argv[]) { //創建一個窗口 cvNamedWindow( "show"); //打開有一個視頻文件 g_capture=cvCreateFileCapture("D:\\car.mp4"); //獲取視頻的總幀數 int frames=(int )cvGetCaptureProperty(g_capture,CV_CAP_PROP_FRAME_COUNT); if(frames>0) { //在窗口show上創建名字為Position的滾動條 cvCreateTrackbar( "Position","show" ,&g_slider_pos,frames,on_changed); } //圖像指針變量 IplImage* frame; while(1) { //從g_capture獲取一幀圖像 填充到相應的內存緩沖區 frame=cvQueryFrame(g_capture); //如果到視頻結尾 則退出循環 if(!frame) break ; //顯示圖像 cvShowImage( "show",frame); //接收用戶按鍵 char c = cvWaitKey(33); //如果接收到 按鍵'Esc' 則退出循環 if(c==27) break; //滾動條 隨著視頻的播放 進行移動 cvSetTrackbarPos( "Position","show" ,frame_count); frame_count++; } //釋放資源 cvReleaseCapture(&g_capture); cvDestroyWindow( "show"); return 0; }
1.網上很多說是avi格式問題, 盡管是AVI文件, 需要把它轉換OpenCV支持的AVI文件.
(這是copy網上的)
OpenCV支持的AVI如下:
Container
FourCC
Name
Description
AVI
'DIB '
RGB(A)
Uncompressed RGB, 24 or 32 bit
AVI
'I420'
RAW I420
Uncompressed YUV, 4:2:0 chroma subsampled
AVI
'IYUV'
RAW I420
identical to I420
轉換格式解決方法:
解決方法1: 下載mencoder.exe , 在window命令行下使用:?mencoder in.avi -ovc raw -vf format=i420 -o out.avi
解決方法2: 下載VitualDub , 我使用1.9.4版本a. File->Open Video File;b. Video->Filters->Add->Convert format;
選擇4:2:0 Planar YCbCr (YV12)或者 32-Bit RGB。c. Save as AVI. 保存完畢。”
還有網上說opencv只支持avi格式至少我現在用的2.4.8還能支持MP4格式了,還跑得不錯。
2.最后就是在配置環境變量時path路徑一定要看清楚是否寫對,
否則同樣的代碼和視頻文件在別人電腦上跑得好好的就你的有問題,可能就是這個問題了。
好了這是我寫的第一篇博客,寫的不好多多見諒!!!
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
