当前位置: 首页 > news >正文

Opencv 入门三(视频滑动条窗口)

视频滑动条窗口源码如下:

#include "opencv2\highgui\highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp" 
#include <iostream> 
#include <fstream> 
using namespace std;
int g_slider_position = 0;      // 滑动条的位置
int g_run = 1, g_dontset = 0; //start out in single step mode
cv::VideoCapture g_cap;
void onTrackbarSlide(int pos, void*) {
    g_cap.set(cv::CAP_PROP_POS_FRAMES, pos);   //真正使进度条移动到我们希望的位置
    if (!g_dontset)
        g_run = 1;
    g_dontset = 0;
}

int main(int argc, char** argv)
{
    cv::namedWindow("Example2_4", cv::WINDOW_AUTOSIZE);
    g_cap.open(string(argv[1]));
    int frames = (int)g_cap.get(cv::CAP_PROP_FRAME_COUNT);
    int tmpw = (int)g_cap.get(cv::CAP_PROP_FRAME_WIDTH);
    int tmph = (int)g_cap.get(cv::CAP_PROP_FRAME_HEIGHT);
    cout << "Video has "<<frames<<" frames of dimensions("<<tmpw<<", "<<tmph <<")."<<endl;
    cv::createTrackbar("Position", "Example2_4", &g_slider_position, frames, onTrackbarSlide);
    
    cv::Mat frame;
    for (;;) {
        if (g_run != 0)
        {
            g_cap >> frame;
            if (frame.empty())break;
            int current_pos = (int)g_cap.get(cv::CAP_PROP_POS_FRAMES);
            g_dontset = 1;
            cv::setTrackbarPos("Position", "Example2_4", current_pos);
            cv::imshow("Example2_4", frame);
            g_run -= 1;
        }

        char c = (char)cv::waitKey(10);
        if (c == 's')//single step
        {
            g_run = 1;
            cout << "Single step,run =" << g_run << endl;
        }
        if (c == 'r')//run mode
        {
            g_run = -1; cout << "Run mode,run=" << g_run << endl;
        }
        if (c == 27)  // Esc 按键
            break;
    }
    
    return 0;
}

 

相关文章:

  • app设置为HomeLauncher后,如果进行adb install安装,界面会黑屏问题排查记录
  • SVN搭建指导
  • c语言:求算数平均数|练习题
  • 机器学习之逻辑回归,一文掌握逻辑回归算法知识文集
  • 回归预测 | MATLAB实现SABO-LSTM基于减法平均优化器优化长短期记忆神经网络的多输入单输出数据回归预测模型 (多指标,多图)
  • 【HarmonyOS开发】ArkUI实现下拉刷新/上拉加载
  • drf知识--01
  • 隐藏通信隧道技术——防御SSH隧道攻击的思路
  • QT GUI代码大全(MainWindow, QFile, QPainter, QGraphicsItem/Scene/View)
  • SSH免密登录
  • leetcode 525. 连续数组(优质解法)
  • 使用包、Crate 和模块管理项目(下)
  • 性能压力测试--确保企业数字化业务稳健运行
  • 前端:NPM的介绍和使用
  • 杰发科技AC7840——在Eclipse环境下使用Jlink调试
  • (三)从jvm层面了解线程的启动和停止
  • [译]前端离线指南(上)
  • 【399天】跃迁之路——程序员高效学习方法论探索系列(实验阶段156-2018.03.11)...
  • 30秒的PHP代码片段(1)数组 - Array
  • CSS 提示工具(Tooltip)
  • Hexo+码云+git快速搭建免费的静态Blog
  • HTTP 简介
  • macOS 中 shell 创建文件夹及文件并 VS Code 打开
  • mysql_config not found
  • React-生命周期杂记
  • unity如何实现一个固定宽度的orthagraphic相机
  • 理清楚Vue的结构
  • 码农张的Bug人生 - 见面之礼
  • 我这样减少了26.5M Java内存!
  • Play Store发现SimBad恶意软件,1.5亿Android用户成受害者 ...
  • 容器镜像
  • #define
  • (03)光刻——半导体电路的绘制
  • (20050108)又读《平凡的世界》
  • (delphi11最新学习资料) Object Pascal 学习笔记---第5章第5节(delphi中的指针)
  • (react踩过的坑)antd 如何同时获取一个select 的value和 label值
  • (分享)一个图片添加水印的小demo的页面,可自定义样式
  • (过滤器)Filter和(监听器)listener
  • (接口自动化)Python3操作MySQL数据库
  • (学习日记)2024.01.19
  • (原创) cocos2dx使用Curl连接网络(客户端)
  • ***原理与防范
  • .a文件和.so文件
  • .bat批处理(二):%0 %1——给批处理脚本传递参数
  • .NET BackgroundWorker
  • .NET Standard 的管理策略
  • .net 设置默认首页
  • .Net 中Partitioner static与dynamic的性能对比
  • .net打印*三角形
  • @configuration注解_2w字长文给你讲透了配置类为什么要添加 @Configuration注解
  • @SuppressLint(NewApi)和@TargetApi()的区别
  • [C#][opencvsharp]opencvsharp sift和surf特征点匹配
  • [c++] 自写 MyString 类
  • [C++11 多线程同步] --- 条件变量的那些坑【条件变量信号丢失和条件变量虚假唤醒(spurious wakeup)】
  • [Django 0-1] Core.Email 模块