c++ - OpenCV - 让 slider 在视频播放期间更新其位置

标签 c++ c video opencv slider

我选择了“学习 OpenCV”并尝试了一些代码示例/练习。在此代码片段中,我想让 slider 随着每个视频帧的变化而更新其位置,但由于某种原因它不起作用(图片卡住并使用以下代码):

#include "cv.h"
#include "highgui.h"

int g_slider_position = 0;
CvCapture* g_capture = NULL;

void onTrackbarSlide(int pos)
{
    cvSetCaptureProperty(g_capture, CV_CAP_PROP_POS_FRAMES, pos);
}

int main(int argc, char** argv)
{
    cvNamedWindow("The Tom 'n Jerry Show", CV_WINDOW_AUTOSIZE);
    g_capture = cvCreateFileCapture(argv[1]);
    int frames = (int) cvGetCaptureProperty(
        g_capture, 
        CV_CAP_PROP_FRAME_COUNT
        );

    if (frames != 0)
    {
        cvCreateTrackbar(
            "Position",
            "The Tom 'n Jerry Show",
            &g_slider_position,
            frames,
            onTrackbarSlide
            );
    }

    IplImage* frame;

    while (1)
    {
        frame = cvQueryFrame(g_capture);
        if (!frame) 
            break;

        cvSetTrackbarPos(
            "Position", 
            "The Tom 'n Jerry Show",
            ++g_slider_position
            );

        cvShowImage("The Tom 'n Jerry Show", frame);
        char c = cvWaitKey(33);
        if (c == 27)
            break;
    }

    cvReleaseCapture(&g_capture);
    cvDestroyWindow("The Tom 'n Jerry Show");

    return 0;
}

知道如何让 slider 和视频按预期工作吗?

最佳答案

This is the actual working code



// PROGRAM TO ADD A UPDATING TRACKBAR TO A VIDEO

#include <cv.h>
#include <highgui.h>


int g_slider_position = 0;
CvCapture* video_capture = NULL;

void onTrackbarSlide(int current_frame)
{
    current_frame = g_slider_position;
    cvSetCaptureProperty(video_capture,CV_CAP_PROP_POS_FRAMES,current_frame);
}

int main( int argc, char** argv )
{
    cvNamedWindow( "Video", CV_WINDOW_AUTOSIZE );
    video_capture = cvCreateFileCapture( "Crowdy.avi");
    int no_of_frames = (int) cvGetCaptureProperty(video_capture,CV_CAP_PROP_FRAME_COUNT);
    if( no_of_frames!= 0 ) 
    {
        cvCreateTrackbar("Slider","Video",&g_slider_position,no_of_frames,onTrackbarSlide);
    }

    IplImage* frame;

    while(1) 
    {
        frame = cvQueryFrame( video_capture );
        if( !frame ) break;
        cvShowImage( "Video", frame );
        cvSetTrackbarPos("Slider","Video",++g_slider_position);
        char c = cvWaitKey(33);
        if( c == 27 ) break;
    }
    cvReleaseCapture( &video_capture );
    cvDestroyWindow( "Video" );

    return(0);
}

关于c++ - OpenCV - 让 slider 在视频播放期间更新其位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5047913/

相关文章:

c++ - 程序在 visual studio 中启动时看不到文件

c++ - 加速 Matlab 到 C++ 的转换

c - 用户空间进程抢占内核线程?

c - sockaddr.sin_port = 1337 与 "real"打开的端口不匹配

c++ - VC++中Float数据类型的值,如何判断是否混合了字符串或特殊字符

ios - iOS:如何获取Youtube视频流网址?

java - 将 List<images> 转换成视频文件?

c++ - 如何从 vector 中返回给定类型的元素?

html - 如何在 HTML 中拉伸(stretch)视频的宽度?

C++ boost 日期格式