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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

视频摘要视频浓缩

發布時間:2023/12/31 综合教程 36 生活家
生活随笔 收集整理的這篇文章主要介紹了 视频摘要视频浓缩 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

視頻摘要 視頻濃縮(一)

視頻摘要又稱視頻濃縮,是對視頻內容的一個簡單概括,以自動或半自動的方式,先通過運動目標分析,提取運動目標,然后對各個目標的運動軌跡進行分析,將不同的目標拼接到一個共同的背景場景中,并將它們以某種方式進行組合。視頻摘要在視頻分析和基于內容的視頻檢索中扮演著重要角色。

視頻錄像存在存儲數據量大,存儲時間長等特點,通過錄像尋找線索,獲取證據傳統的做法是要耗費大量人力、物力以及時間,效率極其低下,以至于錯過最佳破案時機。因此在視頻監控系統中,對原始視頻進行濃縮,可以快速瀏覽,鎖定檢索對象,對于公安加快破案速度,提高大案、要案的破案效率具有重要指導意義。(1)

對于企業應用來說,視頻摘要與壓縮技術可以使企業管理人員在短時間內瀏覽完視頻。在智能手機大行其道的今天,使用視頻摘要技術對監控視頻進行處理,供手機瀏覽,既可以節約管理者的時間,又可以節約大量的流量。(2)

對于我來說,現在存在監控錄像查閱的實際需求,更重要的是這個問題是“圖像處理”的一個典型運用,非常值得研究探索。所以在這里進行研究和實現一、行業背景和劃分 97年CMU的informedia是針對新聞視頻的,而MoCA是針對電影的。在監控視頻方面以色列briefcam是行業領導者,此外還有哥倫比亞大學的VideoQ和IBM的CueVideo。國內這塊處于初級發展狀態。 視頻摘要可以繼續劃分為 1、圖片關鍵幀(提取一些視頻截圖); 2、剪膠片(機器去除靜止畫面,只顯示有目標的畫面); 3、空間換時間(不同時間的事件顯示在同一畫面)。 第3基本上就是能夠用于商業運用的視頻摘要項目,類似提供這樣效果。(注意圖上的兩組人是不同時間的人)。 當然了,真實的視頻可能是這樣的
我這里實驗的背景,首先以768那個avi,然后以營區監控來做(opencv3.0自帶視頻768x576.avi)二、關鍵技術和算法流程 (一)背景建模 背景建模的基(you)本(xiao)方法是“背景建模”。能夠找到的方法包括(1)均值法(2)中值法(3)滑動平均濾波(4)單高斯(5)混合高斯模型(6)codebook方法。我這里實現(1)均值法(3)滑動濾波法和(5)混合高斯法 (1)均值法 對于768*576.avi這個視頻來說,是比較經典的監控視頻,其特點是主要背景景物、光照等是不變的,前景人物來回走動。處理這種問題,如果想把背景取出來,最直接的方法就是統計一個階段的幀(比如1到100)中,圖像中每個像素在絕大多數時間里面的顏色。 如果直接求平均值,結果是這樣的 應該說這種方法是有一定效果的,特別對于背景都是遠景,或者變化不是很大的情況,處理的效果比較好。 但是對于前進的圖像晃動,效果就不是很理想。 使用第0幀和平均值求absdiff,可以看到那個標識牌是很明顯地被認為是前景了。這個效果應該不是太好。

voidGoBgModeling(constchar*videoFilePath,constintframe_num_used,Mat*bgMat,
constintsize1,constintsize2,constintsigma1,constintsigma2){
//聲明
intframe_no=0;
Matframe;
Mattmp;
VideoCapturepCapture(videoFilePath);//自己選取一段avi視頻
if(!pCapture.isOpened()){
printf("Unabletoopenvideofileforbackgroundmodeling!
");
return;
}
printf("BackgroundModeling...
");
//逐幀讀取視頻
MatmatTmp;
while(frame_no<frame_num_used){
pCapture>>frame;
frame.convertTo(frame,CV_32FC3);
frame_no+=1;
if(frame_no==1){
//初始化
tmp=Mat::zeros(frame.rows,frame.cols,CV_32FC3);
matTmp=frame.clone();
}
tmp=tmp+frame/frame_num_used;
*bgMat=tmp;
}
bgMat->convertTo(*bgMat,CV_8UC3);
matTmp.convertTo(matTmp,CV_8UC3);
absdiff(matTmp,*bgMat,matTmp);
printf("BackgroundModelhasbeenachieved!
");
}

(2)滑動濾波法

/*Addsimagetoaccumulatorwithweights:acc=acc*(1-alpha)+image*alpha*/

這種方法的原理我搞的不是很清楚,如果采用這種方法計算背景的話,越是在前面的圖片,其權重被設定的越大。同樣的視頻結果如下這個結果我看還不如均值。

/**
*背景建模
*/
voidbgModeling(constchar*videoFilePath,constintframe_num_used,IplImage**bgImg,
constintsize1,constintsize2,constintsigma1,constintsigma2){
//聲明
IplImage*frame=NULL;
CvMat*frameMat=NULL;
CvMat*bgMat=NULL;
CvCapture*pCapture=NULL;
IplImage*framtmp=NULL;
CvMat*mattmp=NULL;
intframe_no=0;
pCapture=cvCaptureFromFile(videoFilePath);//自己選取一段avi視頻
if(!pCapture){
printf("Unabletoopenvideofileforbackgroundmodeling!
");
return;
}
if(*bgImg!=NULL){//非空需先清空*bgImg指向的內存
cvReleaseImage(bgImg);
}
printf("BackgroundModeling...
");
//逐幀讀取視頻
while(frame_no<frame_num_used){
frame=cvQueryFrame(pCapture);
frame_no+=1;
if(frame_no==1){
//初始化
framtmp=cvCreateImage(cvSize(frame->width,frame->height),frame->depth,frame->nChannels);
cvCopy(frame,framtmp);
*bgImg=cvCreateImage(cvSize(frame->width,frame->height),frame->depth,frame->nChannels);
cvCopy(frame,*bgImg);
frameMat=cvCreateMat(frame->height,frame->width,CV_32FC3);
bgMat=cvCreateMat((*bgImg)->height,(*bgImg)->width,CV_32FC3);
cvConvert(frame,frameMat);
cvConvert(*bgImg,bgMat);
continue;
}
//視頻幀IplImage轉CvMat
cvConvert(frame,frameMat);
//高斯濾波先,以平滑圖像
cvSmooth(frame,frame,CV_GAUSSIAN,size1,size2,sigma1,sigma2);
//滑動平均更新背景(求平均)
cvRunningAvg(frameMat,bgMat,(double)1/frame_num_used);

}

cvConvert(bgMat,*bgImg);
printf("BackgroundModelhasbeenachieved!
");
//釋放內存
cvReleaseCapture(&pCapture);
cvReleaseMat(&frameMat);
cvReleaseMat(&bgMat);
}

(3)混合高斯模型 int_tmain(intargc,_TCHAR*argv[])

{
MatbgMat;
//GoBgModeling("1.avi",100,&bgMat);
cv::VideoCapturecapture;
capture.open("1.avi");

if(!capture.isOpened())
{
std::cout<<"readvideofailure"<<std::endl;
return-1;
}
cv::BackgroundSubtractorMOG2mog;

cv::Matforeground;
cv::Matbackground;

cv::Matframe;
longframeNo=0;
while(capture.read(frame))
{
++frameNo;
std::cout<<frameNo<<std::endl;
//運動前景檢測,并更新背景
mog(frame,foreground,0.001);
//腐蝕
cv::erode(foreground,foreground,cv::Mat());
//膨脹
cv::dilate(foreground,foreground,cv::Mat());
mog.getBackgroundImage(background);//返回當前背景圖像
cv::imshow("video",foreground);
cv::imshow("background",background);
if(cv::waitKey(25)>0)
{
break;
}
}
return0;
}

這里雖然是直接使用了opencv提供的Mog模塊,應該說效果相當不錯。但是也需要對mog的基本原理進行理清和理解,并且對opencv的實現進行整理,這樣才算吃透知識。

來自為知筆記(Wiz)

目前方向:圖像處理,人工智能

總結

以上是生活随笔為你收集整理的视频摘要视频浓缩的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。