• opencv 实现进度控制


    进度控制:

    #include <opencvcv.h>
    #include <opencvhighgui.h>
    #include <opencvcxcore.h>
    //记录滚动条的当前位置
    int g_slider_pos = 0;
    
    //滚动条的回调函数  参数int pos 是指当前滚动条所在位置
    void on_changed(int pos)
    {
    	//输出滚动条当前所在位置
    	printf("g_slider_pos is %d 
    " , g_slider_pos);
    
    }
    
    int main(int argc, char* argv[])
    {
    	//创建一个窗口
    	cvNamedWindow("show");
    
    	//在窗口show上创建名字为Position的滚动条
    	cvCreateTrackbar(
    			"Position",
    			"show",
    			&g_slider_pos,
    			400,
    			on_changed
    			);
    
    	//显示滚动条
    	cvShowImage("show",NULL);
    
    	//等待用户按键
    	cvWaitKey(0);
    
    	return 0;
    }


    视频化的进度控制:

    #include <opencvcv.h>
    #include <opencvhighgui.h>
    #include <opencvcxcore.h>
    
    
    //声明一个CvCapture类型指针 用于接收cvCreateFileCapture的返回值
     
    CvCapture* g_capture = NULL;
    
    //记录滚动条的当前位置
     
    int g_slider_pos = 0;
    
    //对视频帧进行计数的变量
     
    int frame_count = 0;
    
    //滚动条的回调函数  参数int pos 是指当前滚动条所在位置
     
    void onTrackbarSlider(int pos)
     
    {
     
            //设置g_capture的属性  使得 从位置pos开始播放视频
     
            cvSetCaptureProperty(
     
                    g_capture,
     
                    CV_CAP_PROP_POS_FRAMES,
     
                    pos
     
                    );        
     
    
            //在拉动滚动条后  保持变量frame_count与滚动条的位置是同步的
     
            frame_count = pos ;
     
    
    
    }
     
    
    int main(int argc, char* argv[])
     
    {
     
    
            //创建一个窗口
     
            cvNamedWindow("show");
     
    
            //打开有一个视频文件
     
            g_capture = cvCreateFileCapture("C:\Users\zxl\Desktop\1.avi");
     
    
            //获取视频的总帧数
     
            int frames = (int)cvGetCaptureProperty(
     
                                             g_capture,
     
                                             CV_CAP_PROP_FRAME_COUNT
     
                                             );
     
            if(frames>0)
     
            {
     
                    //在窗口show上创建名字为Position的滚动条
     
                    cvCreateTrackbar(
     
                            "Position",
     
                            "show",
     
                            &g_slider_pos,
     
                            frames,
     
                            onTrackbarSlider
     
                            );
     
            }
     
    
            //图像指针变量
     
            IplImage* frame;
     
    
            while(1)
     
            {
     
                    //从g_capture获取一帧图像 填充到相应的内存缓冲区
     
                    frame = cvQueryFrame(g_capture);
     
    
                    //如果到视频结尾 则退出循环
     
                    if(!frame)
     
                    {
     
                            break;
     
                    }
     
    
    
                    //显示图像
     
                    cvShowImage("show",frame);
     
    
                    //接收用户按键
     
                    char c = cvWaitKey(33);
     
    
                    //如果接收到 按键'Esc' 则退出循环
     
                    if(c==27)
     
                    {
     
                            break;
     
                    }
     
    
                    //滚动条 随着视频的播放 进行移动
     
                    cvSetTrackbarPos("Position","show", frame_count);
     
                    frame_count++;
     
    
            }
     
    
            //释放资源
     
            cvReleaseCapture(&g_capture);
     
            cvDestroyWindow("show");
     
    
            return 0;
     
    }
     


     

  • 相关阅读:
    分布式并行计算MapReduce
    备份
    【爬虫综合作业】猫眼电影TOP100分析
    爬取全部的校园新闻
    获取一篇新闻的全部信息
    爬虫原理
    中文词频统计
    复合数据类型,英文词频统计
    字符串、文件操作,英文词频统计预处理
    期末大作业
  • 原文地址:https://www.cnblogs.com/pangblog/p/3265382.html
Copyright © 2020-2023  润新知