OpenCV C++ 学习笔记(四):图像/视频的输入输出(highgui模块 高层GUI和媒体I/O)

news2025/12/15 16:15:57

文章目录

  • 图片读取
  • 创建窗口
  • 图片显示
  • 图片保存
  • 视频输入输出


图片读取

cv::Mat imread( const String& filename, int flags = IMREAD_COLOR );
enum ImreadModes {
	IMREAD_UNCHANGED            = -1, 
	//!< If set, return the loaded image as is (with alpha channel, otherwise it gets cropped). Ignore EXIF orientation.

	IMREAD_GRAYSCALE            = 0,  
	//!< If set, always convert image to the single channel grayscale image (codec internal conversion).

	IMREAD_COLOR                = 1,  
	//!< If set, always convert image to the 3 channel BGR color image.

	IMREAD_ANYDEPTH             = 2,  
	//!< If set, return 16-bit/32-bit image when the input has the corresponding depth, otherwise convert it to 8-bit.

	IMREAD_ANYCOLOR             = 4,  
	//!< If set, the image is read in any possible color format.

	IMREAD_LOAD_GDAL            = 8,  
	//!< If set, use the gdal driver for loading the image.

	IMREAD_REDUCED_GRAYSCALE_2  = 16, 
	//!< If set, always convert image to the single channel grayscale image and the image size reduced 1/2.

	IMREAD_REDUCED_COLOR_2      = 17, 
	//!< If set, always convert image to the 3 channel BGR color image and the image size reduced 1/2.

	IMREAD_REDUCED_GRAYSCALE_4  = 32, 
	//!< If set, always convert image to the single channel grayscale image and the image size reduced 1/4.

	IMREAD_REDUCED_COLOR_4      = 33, 
	//!< If set, always convert image to the 3 channel BGR color image and the image size reduced 1/4.

	IMREAD_REDUCED_GRAYSCALE_8  = 64, 
	//!< If set, always convert image to the single channel grayscale image and the image size reduced 1/8.

	IMREAD_REDUCED_COLOR_8      = 65, 
	//!< If set, always convert image to the 3 channel BGR color image and the image size reduced 1/8.

	IMREAD_IGNORE_ORIENTATION   = 128 
	//!< If set, do not rotate the image according to EXIF's orientation flag.
};

创建窗口

void namedWindow(const String& winname, int flags = WINDOW_AUTOSIZE);

图片显示

void imshow(const String& winname, InputArray mat);

输入窗口名称和要显示的图像

若窗体未创建,会自动进行创建

CV_EXPORTS_W int waitKey(int delay = 0);

控制图片的展示时间,如设置delay=0,则表示一直展示,按SPACE停止展示。如设置delay不为0,则表示停留delay毫秒。

图片保存

bool imwrite( const String& filename, 
			  InputArray img,
              const std::vector<int>& params = std::vector<int>());

视频输入输出

explicit VideoCapture::VideoCapture(const String& filename, int apiPreference = CAP_ANY);
explicit VideoCapture::VideoCapture(const String& filename, int apiPreference, const std::vector<int>& params);
explicit VideoCapture::VideoCapture(int index, int apiPreference = CAP_ANY);
explicit VideoCapture::VideoCapture(int index, int apiPreference, const std::vector<int>& params);
cv::VideoWriter videoWriter;

VideoWriter::VideoWriter(const String& filename, int fourcc, double fps,Size frameSize, bool isColor = true);
VideoWriter::VideoWriter(const String& filename, int fourcc, double fps, const Size& frameSize,const std::vector<int>& params);
VideoWriter::VideoWriter(const String& filename, int apiPreference, int fourcc, double fps,const Size& frameSize, const std::vector<int>& params);

//构造函数
VideoWriter(const string& filename, 	 //输出文件名
            int fourcc, 				//编码形式。使用CV_FOURCC()宏
            double fps,					//输出视频帧率
            cv::Size frameSize,			 //单帧图片大小 
            bool isColor = true);			 //是否保存为彩色图像,false可传入灰度图像
//Open方法
virtual bool open(const string& filename, 
                  int fourcc, 
                  double fps,
                  Size frameSize, 
                  bool isColor = true);
//写入帧
virtual void write(const Mat& image);
virtual VideoWriter& operator << (const Mat& image);

//原帧无压缩
videoWriter.open("d:/output.avi", CV_FOURCC('D', 'I', 'B', ' '), 30, cv::Size(1024, 1024), false);	
//MPEG-4 编码压缩
videoWriter.open("d:/output1.avi", CV_FOURCC('D', 'I', 'V', 'X'), 30, cv::Size(1024, 1024), false);	

参数说明:

  • filename

    • 影片档案名称(例如video.avi)
    • 图片序列(例如img_00.jpg, img_01.jpg, img_02.jpg, …)
    • 视频流的网址。每个视频流或IP摄像机源均具有其自己的URL方案。请参考源流的文档以了解正确的URL。
  • index

    • 要打开的视频捕获设备的ID。要打开默认摄像头,只需传递0。
    • apiPreferenceCAP_ANY时,使用camera_id + domain_offset(CAP_ *)向后兼容有效。
  • apiPreference(not important)

    • 首选使用的Capture API后端。如果有多个可用的读取器实现,则可以用于实施特定的读取器实现。
    • 设置读取的摄像头编号,默认CAP_ANY=0,自动检测摄像头。多个摄像头时,使用索引0,1,2,…进行编号调用摄像头。 apiPreference = -1时单独出现窗口,选取相应编号摄像头。
  • fps:帧率

  • frameSize:输出视频中每一帧的尺寸

  • fourcc
    用于编码视频文件的编码器,通过VideoWriter::fourcc函数获得

CV_WRAP static int fourcc(char c1, char c2, char c3, char c4);
代码含义
VideoWriter::fourcc('M', 'P', '4', 'V')MPEG-4编码,输出文件拓展名mp4
VideoWriter::fourcc( 'X' , '2' , '6' , '4' )MPEG-4编码,输出文件拓展名mp4
VideoWriter::fourcc('P','I','M','1')MPEG-1编码,输出文件拓展名avi
VideoWriter::fourcc('X','V','I','D')MPEG-4编码,输出文件拓展名avi
VideoWriter::fourcc('I','4','2','0')YUV编码,输出文件拓展名avi
VideoWriter::fourcc('T','H','E','O')ogg vorbis编码,输出文件拓展名ogv
VideoWriter::fourcc('F',L','V','1')flash video编码,输出文件拓展名flv

示例

VideoCapture video("demo.mp4");
Mat fps;
video.read(fps);
VideoWriter video_out("demo_out.avi", VideoWriter::fourcc('P','I','M','1'), 30, fps.size());
    while (1){
        Mat fps;
        video>>fps;
        //video.read(fps);
        fps>>video_out;
        //video_out.write(fps);
        imshow("video", fps);
        waitKey(10);//控制帧率
    }

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

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

相关文章

蓝桥杯国赛训练 day1 Java大学B组

目录 k倍区间 舞狮 交换瓶子 k倍区间 取模后算组合数就行 import java.util.HashMap; import java.util.Map; import java.util.Scanner;public class Main {static Scanner sc new Scanner(System.in);public static void main(String[] args) {solve();}public static vo…

PyTorch——非线性激活(5)

非线性激活函数的作用是让神经网络能够理解更复杂的模式和规律。如果没有非线性激活函数&#xff0c;神经网络就只能进行简单的加法和乘法运算&#xff0c;没法处理复杂的问题。 非线性变化的目的就是给我们的网络当中引入一些非线性特征 Relu 激活函数 Relu处理图像 # 导入必…

OPenCV CUDA模块目标检测----- HOG 特征提取和目标检测类cv::cuda::HOG

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 cv::cuda::HOG 是 OpenCV 的 CUDA 模块中对 HOG 特征提取和目标检测 提供的 GPU 实现。它与 CPU 版本的 cv::HOGDescriptor 类似&#xff0c;但利…

MATLAB读取文件内容:Excel、CSV和TXT文件解析

MATLAB读取文件内容&#xff1a;Excel、CSV和TXT文件解析 MATLAB 是一款强大的数学与工程计算工具&#xff0c;广泛应用于数据分析、模型构建和图像处理等领域。在处理实际问题时&#xff0c;我们常常需要从文件中读取数据进行分析。本文将介绍如何使用 MATLAB 读取常见的文件…

Spring MVC 之 异常处理

使用Spring MVC可以很灵活地完成数据的绑定和响应&#xff0c;极大的简化了Java Web的开发。但Spring MVC提供的便利不仅仅如此&#xff0c;使用Spring MVC还可以很便捷地完成项目中的异常处理、自定义拦截器以及文件上传和下载等高级功能。本章将对Spring MVC提供的这些高级功…

ubuntu24.04 使用apt指令只下载不安装软件

比如我想下载net-tools工具包及其依赖包可以如下指令 apt --download-only install net-tools 自动下载的软件包在/var/cache/apt/archives/目录下

计算机网络安全问答数据集(1788条) ,AI智能体知识库收集! AI大模型训练数据!

继续收集数据集&#xff0c;话不多说&#xff0c;见下文&#xff01; 今天分享一个计算机网络安全问答数据集&#xff08;1788条)&#xff0c;适用于AI大模型训练、智能体知识库构建、安全教育系统开发等多种场景&#xff01; 一、数据特点 结构清晰&#xff1a;共计1788条&…

WinCC学习系列-高阶应用(WinCC REST通信)

WinCC作为一个经典SCADA系统&#xff0c;它是OT与IT数据无缝集成桥梁&#xff0c;自WinCC7.5版本开始&#xff0c;可以直接提供Rest服务用于其它系统数据访问和操作。 WinCC REST 服务允许外部应用程序访问 WinCC 数据。 外部应用程序可以通过 REST 接口读取和写入 WinCC 组态…

使用交叉编译工具提示stubs-32.h:7:11: fatal error: gnu/stubs-soft.h: 没有那个文件或目录的解决办法

0 前言 使用ST官方SDK提供的交叉编译工具、cmake生成Makefile&#xff0c;使用make命令生成可执行文件提示fatal error: gnu/stubs-soft.h: 没有那个文件或目录的解决办法&#xff0c;如下所示&#xff1a; 根据这一错误提示&#xff0c;按照网上的解决方案逐一尝试均以失败告…

macOS 连接 Docker 运行 postgres,使用navicat添加并关联数据库

下载 docker注册一个账号&#xff0c;登录 Docker创建 docke r文件 mkdir -p ~/.docker && touch ~/.docker/daemon.json写入配置&#xff08;全量替换&#xff09; {"builder": {"gc": {"defaultKeepStorage": "20GB",&quo…

指针的使用——基本数据类型、数组、结构体

1 引言 对于学习指针要弄清楚如下问题基本可以应付大部分的场景&#xff1a; ① 指针是什么&#xff1f; ② 指针的类型是什么&#xff1f; ③ 指针指向的类型是什么&#xff1f; ④ 指针指向了哪里&#xff1f; 2 如何使用指针 任何东西的学习最好可以总结成一种通用化的…

TK海外抢单源码/指定卡单

​ 抢单源码&#xff0c;有指定派单&#xff0c;打针&#xff0c;这套二改过充值跳转客服 前端vue 后端php 两端分离 可二开 可以指定卡第几单&#xff0c;金额多少&#xff0c; 前后端开源 PHP7.2 MySQL5.6 前端要www.域名&#xff0c;后端要admin.域名 前端直接静态 伪静…

【Linux】Linux 环境变量

参考博客&#xff1a;https://blog.csdn.net/sjsjnsjnn/article/details/125533127 一、环境变量 1.1 基本概念 环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数如&#xff1a;我们在编写C/C代码的时候&#xff0c;在链接的时候&am…

OpenCV在图像上绘制文字示例

OpenCV计算机视觉开发实践&#xff1a;基于Qt C - 商品搜索 - 京东 OpenCV中除了提供绘制各种图形的函数外&#xff0c;还提供了一个特殊的绘制函数&#xff0c;用于在图像上绘制文字。这个函数是putText()&#xff0c;它是命名空间cv中的函数&#xff0c;其声明如下&#xff…

为什么要选择VR看房?VR看房有什么优点?

VR看房&#xff1a;革新传统&#xff0c;重塑体验 在当今社会&#xff0c;虚拟现实&#xff08;VR&#xff09;技术正以前所未有的速度渗透到我们生活的各个领域&#xff0c;其中VR看房作为房地产领域的重要创新。本文将讨论为什么要选择VR看房以及VR看房的主要优点&#xff0…

pytorch基本运算-范数

引言 前序学习进程中&#xff0c;已经对pytorch基本运算有了详细探索&#xff0c;文章链接有&#xff1a; 基本运算 广播失效 乘除法和幂运算 hadamard积、点积和矩阵乘法 上述计算都是以pytorch张量为运算元素&#xff0c;这些张量基本上也集中在一维向量和二维矩阵&#x…

Transformer实战——词嵌入技术详解

Transformer实战——词嵌入技术详解 0. 前言1. 词嵌入基础2. 分布式表示3. 静态嵌入3.1 Word2Vec3.2 GloVe 4. 使用 Gensim 构建词嵌入5. 使用 Gensim 探索嵌入空间6. 动态嵌入小结系列链接 0. 前言 在本节中&#xff0c;我们首先介绍词嵌入的概念&#xff0c;然后介绍两种实现…

[pdf、epub]300道《软件方法》强化自测题业务建模需求分析共257页(202505更新)

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 在本账号CSDN资源下载&#xff0c;或者访问链接&#xff1a; http://www.umlchina.com/url/quizad.html 如果需要提取码&#xff1a;umlc 文件夹中的“300道软件方法强化自测题2025…

Vue3入门指南:从零到精通的快速上手

齐爷学vue3 一、Vue3入门 vite&#xff1a;前端构架工具&#xff0c;构建速度快于webpack。轻量快速、对TS&#xff0c;JSX&#xff0c;CSS开箱即用、按需编译。 创建Vue3工程 1.在想要创建Vue3的位置打开cmd&#xff0c;执行如下命令。 npm create vuelatest 2.功能只选择…

吴恩达MCP课程(5):mcp_chatbot_prompt_resource.py

前提条件&#xff1a; 1、吴恩达MCP课程&#xff08;5&#xff09;&#xff1a;research_server_prompt_resource.py 2、server_config_prompt_resource.json文件 {"mcpServers": {"filesystem": {"command": "npx","args"…