opencv讀取並播放avi視屏


  視屏的本質是一些靜態的圖像的集合,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;
}
 
         

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM