OpenCV Trackbar 控制視頻播放 cvSetTrackbarPos 的問題

#include "stdio.h"
#include "stdafx.h"
#include "highgui.h"
#include <cv.h>
#include <cxcore.h>
#include "iostream"


using namespace std;
using namespace cv;


int g_slider_position = 0;  
CvCapture* g_capture = NULL;  
const char* window_name = "The Tom 'n Jerry Show";  
const char* trackbar_name = "Position";  
  
void onTrackbarSlide( int pos )  
{  
    cvSetCaptureProperty(g_capture,CV_CAP_PROP_POS_FRAMES,pos);  
  
    g_slider_position = pos;  
}  
  
int main(int argc, char** argv)  
{  
    cvNamedWindow(window_name, CV_WINDOW_AUTOSIZE);  
    g_capture = cvCreateFileCapture("D:\\C++ Projects\\OpenCV_project\\test_video\\gate_11ms_00-30s.avi");  
    int frames = (int) cvGetCaptureProperty(  
        g_capture,   
        CV_CAP_PROP_FRAME_COUNT  
        );  
  
    if (frames != 0)  
    {  
        cvCreateTrackbar(  
            trackbar_name,  
            window_name,  
            &g_slider_position,  
            frames,  
            onTrackbarSlide  
            );  
    }  
  
    IplImage* frame;  
  
    while (1)  
    {  
        frame = cvQueryFrame(g_capture);  
        if (!frame)   
            break;  

 

  /*   此函數會讓視頻畫面出現長時間靜止不動. 去掉之後trackbar能實現拖動播放的功能.

        如果回調函數onTrackbarSlide 不設置capture的當前幀數,set函數能正常工作.

        跟蹤內存發現 加上settrackbar函數後,capture的幀數會靜止到一個固定值.不知道是不是溢出造成的.如果是,那麼可能是cvSetTrackbarPos 和 onTrackbarSlide 相互調用造     成的.  但是onTrackbarSlide函數無法跟蹤,因爲在斷點模式下只能到達一次.

        待解決*******                                           

        cvSetTrackbarPos(  
            trackbar_name,   
            window_name,  
            g_slider_position+1  
            );  
  */
        cvShowImage(window_name, frame);  
        char c = cvWaitKey(33);  
        if (c == 27)  
            break;  
    }  
  
    cvReleaseCapture(&g_capture);  
    cvDestroyWindow(window_name);  
  
    return 0;  
}  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章