視屏的本質是一些靜態的圖像的集合,opencv可以不斷讀取視屏中的圖片,顯示,就產生了類似電影的效果。
這樣也就可以通過opencv對實時的視屏流進行處理了。
#include "stdafx.h" #include "cv.h" #include "highgui.h" int main(){ cvNamedWindow("Example2",CV_WINDOW_AUTOSIZE);//申請可以自動調節大小的窗口Example1 CvCapture *capture=cvCreateFileCapture("F:/film/kq.avi");//讀取avi格式的影片 IplImage*frame; while(1){ frame = cvQueryFrame(capture);//讀取下一個影片幀率 if(!frame)break; cvShowImage("Example2",frame); char c=cvWaitKey(33); //每讀取一個視頻片度就停止33毫秒,並且會收集鍵盤的輸入 if(c == 27)break;//27就是對應鍵盤上的ESC建,如果沒有按鍵盤的話C為-1 } cvReleaseCapture(&capture); cvDestroyWindow("Example2"); return 0; }
帶滾動條的程序
#include "stdafx.h" #include "cv.h" #include "highgui.h" int g_slider_position = 0; CvCapture * g_capture =NULL; void onTrackbarSlide(int pos){ //再拖動滾動條的時候,滾動條的位置會被作為int數字傳入 cvSetCaptureProperty( g_capture, CV_CAP_PROP_POS_FRAMES, pos ); } int main(){ cvNamedWindow("Example3",CV_WINDOW_AUTOSIZE);//申請可以自動調節大小的窗口Example1 g_capture=cvCreateFileCapture("F:/film/kq.avi");//讀取avi格式的影片 int frames = (int) cvGetCaptureProperty( g_capture, CV_CAP_PROP_FRAME_COUNT ); if(frames != 0){ cvCreateTrackbar( //進度條 "Position", "Example3", &g_slider_position, frames, onTrackbarSlide ); } IplImage * frame; while(1){ frame = cvQueryFrame(g_capture);//讀取下一個影片幀率 if(!frame)break; cvShowImage("Example3",frame); char c=cvWaitKey(33); //每讀取一個視頻片度就停止33毫秒,並且會收集鍵盤的輸入 if(c == 27)break;//27就是對應鍵盤上的ESC建,如果沒有按鍵盤的話C為-1 } cvReleaseCapture(&g_capture); cvDestroyWindow("Example2"); return 0; }