OpenCV Trackbar 控制视频播放 cvSetTrackbarPos 的问题

本文探讨了在使用OpenCV的Trackbar控制视频播放时遇到的问题,即`cvSetTrackbarPos`可能导致视频画面长时间静止。通过分析,发现可能的原因是`onTrackbarSlide`回调函数中未正确设置`capture`的当前帧数,进而造成捕获帧数固定。目前推测是`cvSetTrackbarPos`与`onTrackbarSlide`相互调用导致的内存溢出问题,但尚未找到确切解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#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;  
}  
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值