学习Opencv(蝴蝶书/C++)代码——2.OpenCV初探

文章目录

  • 0. 图像读取与显示
  • 1. 视频文件读取与操作
    • 1.1 示例代码
    • 1.1 OpenCV支持的视频格式
  • 2. 加入滑动条
    • 2.1 示例代码
    • 2.2 报错/Warning
    • 2.3 关于toolbar
  • 3. 简易视频播放器
    • 3.1 OpenCV检测方向键被按下
      • 3.1.1 Windows下
      • 3.1.2 linux下
    • 3.1 方向键控制视频变化
  • 4. 简单的变换
  • 5. 写视频
    • 5.1 关于写视频时的编码格式
      • 5.1.1 系统可用的编码格式
      • 5.1.2 编解码器tag表示意义
      • 5.1.3 使用编解码器
    • 5.2 对数极坐标变换
    • 5.3 RGB三通道写视频
    • 5.4 打开多个窗口cv::waitKey()无响应问题/响应迟钝
    • 5.5. cv::waitKey(0)和cv::waitKey(1)
    • 5.6 OpenCV VideoWriter()保存慢,写入文件fps与源文件不同
    • 5.7 报错[mov,mp4,m4a,3gp,3g2,mj2 @ 0x7fd09c21ed40] moov atom not found
  • 6.课后练习
  • X. 插件

0. 图像读取与显示

示例1,来自learning OpenCV 3的配套源码
https://github.com/oreillymedia/Learning-OpenCV-3_examples/blob/master/example_02-01.cpp

//Example 2-1. A simple OpenCV program that loads an image from disk and displays it
//on the screen
#include <opencv2/opencv.hpp>void help(char** argv ) {std::cout << "\n"<< "A simple OpenCV program that loads and displays an image from disk\n"<< argv[0] <<" <path/filename>\n"<< "For example:\n"<< argv[0] << " ../fruits.jpg\n"<< std::endl;
}int main( int argc, char** argv ) {if (argc != 2) {help(argv);return 0;}cv::Mat img = cv::imread( argv[1], -1 );if( img.empty() ) return -1;cv::namedWindow( "Example 2-1", cv::WINDOW_AUTOSIZE );cv::imshow( "Example 2-1", img );cv::waitKey( 0 );cv::destroyWindow( "Example 2-1" );return 0;
}

1. 视频文件读取与操作

1.1 示例代码

示例1:
https://github.com/opencv/opencv/blob/4.x/samples/cpp/videocapture_starter.cpp

示例2:
来自cv::VideoCapture Class Reference的Detailed Description

如果觉得上面那个写的比较复杂,不直观,可以看看简单的:

#include <iostream>
#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/videoio.hpp>using namespace cv;
int main(int argc, char **argv)
{Mat frame;// 初始化一个VIDEOCAPTURE对象capVideoCapture cap;// 使用默认的API打开默认的相机// cap.open(0);// 或者更先进的用法,选择任意一个API后端int deviceID = 0;        // 0 = open default cameraint apiID = cv::CAP_ANY; // 0 = autodetect default API// 使用选择的API打开选择的相机cap.open(deviceID, apiID);// 判断是否正确打开视频流if (!cap.isOpened()){std::cerr << "ERROR! Unable to open camera\n";return -1;}// 开始读取视频std::cout << "Start grabbing" << std::endl<< "Press any key to terminate" << std::endl;for (;;){// 等待从视频读入新帧并把它存储到'frame'中cap.read(frame);// 检查是否读取成功if (frame.empty()){std::cerr << "ERROR! blank frame grabbed\n";break;}// 实时显示,每5ms显示一帧图像直到有任意按键imshow("Live", frame);if (waitKey(5) >= 0)break;}// 相机对象会在VideoCapture析构函数中自动释放return 0;
}

示例3:
来自learning OpenCV 3的配套源码
https://github.com/oreillymedia/Learning-OpenCV-3_examples/blob/master/example_02-03.cpp

int main(int argc, char **argv)
{cv::namedWindow("Example2");cv::VideoCapture cap;// VideoCapture可以打开和关闭很多ffmpeg支持的视频文件cap.open(std::string(argv[1]));cv::Mat frame;if (cap.isOpened()){for (;;){cap >> frame;// Stream operator to read the next video frameif (frame.empty())break;cv::imshow

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/151150.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

三相异步电机动态数学模型及矢量控制仿真

文章目录 三相异步电机动态数学模型及矢量控制仿真1、异步电机三相方程2、坐标变换3、磁链3/2变换推导4、两相静止坐标系下的方程5、两相旋转坐标系下的方程6、以 ω-is-Ψr 为状态变量的状态方程7、矢量控制及 matlab 仿真 原文链接需要仿真的同学请关注【Qin的学习营地】 三相…

JMeter基础

JMeter工具基础使用 JMeter的三个重要组件线程组HTTP请求查看结果树 JMeter参数化用户定义的变量用户参数CSV数据文件设置函数四种参数化方式的不同 JMeter断言JMeter关联正则表达式XPath提取器JSON提取器 JMeter属性JMeter录制脚本JMeter直连数据库JMeter逻辑控制器JMeter定时…

百云齐鲁 | 云轴科技ZStack成功实践精选(山东)

山东省作为我国重要的工业基地和北方地区经济发展的战略支点&#xff0c;在“十四五”规划中将数字强省建设分为数字基础设施、数字科技、数字经济、数字政府、数字社会、数字生态六大部分&#xff0c;涵盖政治、经济、民生等多个方面&#xff0c;并将大数据、云计算、人工智能…

【错误记录】Uncaught TypeError: m.nodeName.toLowerCase is not a function

描述&#xff1a;在控制台输出上述错误~ 原因&#xff1a;在页面中&#xff0c;使用jQuery 开发时&#xff0c;命名不能和jQuery一起方法属性冲突&#xff0c;比如这里的nodeName&#xff0c;这里换一个不冲突的名字&#xff0c;就解决问题了。

统一身份认证平台之SSO建设

前言 上篇说道Passwordless无密码技术&#xff0c;也提到了数字时代密码管理的难度&#xff0c;其实在日常的生活中&#xff0c;很多用户也会因为忘记某些网站的登录密码而烦恼。为了方便记忆&#xff0c;很多人都在不同的站点使用相同的用户名和密码&#xff0c;虽然也可以减少…

uvm环境获取系统时间的方法和使用案例

背景&#xff1a; 有时候我们想统计一下验证环境中某个步骤总共花费了多少时间&#xff0c;有什么比较方便的方法呢&#xff0c;利用$realtime理论上也是能做到的&#xff0c;不过这个和timescale绑定起来了&#xff0c;需要手动换算成单位是秒的数&#xff0c;现在提供一种利用…

未来之路:互联网技术驱动汽车行业的创新浪潮

在互联网迅猛发展的今天&#xff0c;它的触角已延伸至各行各业&#xff0c;其中最引人注目的莫过于汽车行业。随着互联网技术的融合&#xff0c;汽车正变得越来越智能&#xff0c;预示着一场关于出行方式的革命。 首先&#xff0c;自动驾驶技术的发展正日益成熟。依托先进的传感…

josef约瑟 闭锁继电器 LB-7DG 100V 50HZ 导轨安装

LB-7型闭锁继电器 闭锁继电器LB-7导轨安装 一、用途 LB-7型闭锁继电器(以下简称继电器)用于发电厂及变电所内高压母线带电时防止和接地刀闸。 二、结构和工作原理 1、继电器按整流式原理构成&#xff0c;该继电器由变压器、电阻器、整流桥、滤波电容、极化继电器及指示灯组…

新人报到

文章目录 自我介绍博客平台写一些什么&#xff1f;为什么写博客&#xff1f; 自我介绍 计算机硕士研究生在读&#xff08;研二&#xff09;&#xff0c;研究方向为神经网络模型量化、模型部署、深度学习和计算机视觉等。 博客平台 CSDN&#xff1a;_leoatliang 2022年5月12…

【C++初阶】STL详解(四)vector的模拟实现

本专栏内容为&#xff1a;C学习专栏&#xff0c;分为初阶和进阶两部分。 通过本专栏的深入学习&#xff0c;你可以了解并掌握C。 &#x1f493;博主csdn个人主页&#xff1a;小小unicorn ⏩专栏分类&#xff1a;C &#x1f69a;代码仓库&#xff1a;小小unicorn的代码仓库&…

Looking up a deactivated widget‘s ancestor is unsafe

背景&#xff1a; showCupertinoModalPopup中使用Navigator.of(context).pushNamedAndRemoveUntil(RouteName.login, (route) > false); 报错&#xff1a;Looking up a deactivated widget’s ancestor is unsafe 解决方案&#xff1a;先将CupertinoModal关闭&#xff0c;再…

使用Lychee搭建个人图片存储系统并进行远程访问设置实现公网访问本地私人图床

文章目录 1.前言2. Lychee网站搭建2.1. Lychee下载和安装2.2 Lychee网页测试2.3 cpolar的安装和注册 3.本地网页发布3.1 Cpolar云端设置3.2 Cpolar本地设置 4.公网访问测试5.结语 1.前言 图床作为图片集中存放的服务网站&#xff0c;可以看做是云存储的一部分&#xff0c;既可…

esbuild打包

esbuild官网 npm install esbuild此命令应该会将 esbuild 安装到你本地的 node_modules 中。 你可以运行如下命令&#xff0c;来检测 esbuild 的原生可执行文件 是否正常&#xff1a; .\node_modules\.bin\esbuild --version这是一个简易的真实案例&#xff0c;用于说明 esbu…

为什么大家考完软考中级都去考高级?原因在这里!

2023上半年软考考试已经结束了&#xff0c;有很多同学在后台留言&#xff0c;一起考软考中级的同学都开始备考高级了&#xff0c;为什么考完软考中级还要考高级呢&#xff1f;软考高级含金量大吗&#xff1f;考试难度高吗&#xff1f;软考中级我考的集成&#xff0c;高级应该选…

STM32获取最大堆栈空间

参考 stackflow相关讨论 原理 通过参考链接&#xff0c;可知探测Stack的最大深度是先在stack中填充不常用的特定值&#xff0c;然后实时检测这些值哪些发生了变化&#xff0c;变化的表示使用到了这个空间&#xff0c;如果程序完全遍历后&#xff0c;有些值还是没变&#xff…

c语言-输入输出详解

文章目录 格式化输入输出占位符printfscanf 字符串输入输出puts&#xff08;&#xff09;gets&#xff08;&#xff09; 字符输入输出putchar&#xff08;&#xff09;getchar&#xff08;&#xff09; 区别 格式化输入输出 输入输出的库函数的头文件&#xff1a; #include<…

物联网AI MicroPython学习之语法 SPI串行外设通信

学物联网&#xff0c;来万物简单IoT物联网&#xff01;&#xff01; SPI 介绍 模块功能: SPI串行外设驱动 接口说明 SPI - 构建SPI对象 函数原型&#xff1a;SPI(id, baudrate&#xff0c;polarity, phase&#xff0c;sck, mosi, miso)参数说明&#xff1a; 参数类型必选参…

内置函数和消息传递API

消息传递范式 消息函数、聚合函数与更新函数 消息函数接受一个参数 edges&#xff0c;这是一个 EdgeBatch 的实例&#xff0c; 在消息传递时&#xff0c;它被DGL在内部生成以表示一批边。edges 有 src、 dst 和 data 共3个成员属性&#xff0c; 分别用于访问源节点、目标节点…

使用Docker/K8S/Helm部署项目流程

假设项目已经开发完成&#xff0c;部署流程如下&#xff1a; 一、制作镜像&#xff1a; 1、创建nginx配置文件default.conf server {listen 80;server_name localhost; # 修改为docker服务宿主机的iplocation / {root /usr/share/nginx/html;index index.html ind…

postgresql安装fdw扩展

最近有同一个服务器不同数据库、不同服务器数据库之间的数据同步需求&#xff0c;使用了fdw 下面举例的是同一个服务器两个不同数据库的同步情况 1、安装扩展 create extension postgres_fdw; 在需要使用fdw的数据库都加上该扩展 2、创建fdw服务器 mlhbase_prd库 CREATE…