1. 程式人生 > >opencv 顯示一個圖片/播放視訊

opencv 顯示一個圖片/播放視訊

//顯示圖片
#include"highgui.h"
int main(int argc,char **argv)
{
    IplImage *img=NULL;
    char *imgname="E:/實驗/image/1.jpg";
    img=cvLoadImage(imgname);//cvLoadImage載入一個圖片 並返回一個IplImage指標
    cvNamedWindow("test",0);//建立一個叫test的視窗,視窗大小固定
    cvShowImage("test",img);//在視窗test中顯示圖片
    cvWaitKey(0);///等待按鍵進行下一步操作,若引數為正整數,則停留一段設定的時間
    cvReleaseImage(&img);//釋放圖片所佔記憶體
    cvDestroyWindow("test");//銷燬視窗
    return 0;

}

//播放視訊

#include"highgui.h"
int main(int argc,char **argv)
{
    
    //播放視訊,不過沒聲音
    cvNamedWindow("test",CV_WINDOW_AUTOSIZE);//建立一個test視窗
    CvCapture*capture=cvCreateFileCapture("E:/實驗/image/adr.mkv");//讀入一個視訊檔案並返回一個CvCapture指標(包括了讀入視訊的所有資訊)
    IplImage *frame;//儲存視訊中的每一幀圖片
    while(1)//迴圈體內讀取capture中的每一幀圖片
    {
        frame=cvQueryFrame(capture);//cvQueryFrame用來將下一幀視訊檔案載入記憶體,並返回當前幀的指標
        // cvLoadImage與cvQueryFrame的區別是前者為影象分配記憶體空間,所以當程式結束時要釋放記憶體空間,
        //而後者使用已經在cvCapture結構中分配好的記憶體,因此沒必要再呼叫cvReleaseImage
        if(!frame) break;//判斷視訊是否結束
        cvShowImage("test",frame);
        char c=cvWaitKey(33);//當前幀顯示後等候33ms,如果期間使用者出發了一個按鍵,c會被設定成這個按鍵的ASCII碼
        if(c==27) break;//當用戶按ESC鍵(ASCII27)時視訊結束
    }
    cvReleaseCapture(&capture);
    cvDestroyWindow("test");
    return 0;
}