vscode+opencv基础用法学习1

案例1:读取图片信息

如果是使用云服务器的话,由于图形界面的问题,使用cv::show来显示图片会报错

// 图片的读取和显示
// 导入opencv头文件
#include "opencv2/opencv.hpp"
#include <iostream>int main(int argc, char** argv)
{// 读取图片,mat是matrix的缩写,是一个矩阵,类似与numpy ndarraycv::Mat image = cv::imread("./media/cat.jpg");// 判断是否读取成功if (image.empty()){std::cout << "无法读取图片 " << std::endl;return 1;}// 打印图片高度和宽度std::cout << "图片高度: " << image.rows << " 宽度: " << image.cols << std::endl;cv::imwrite("./output/gray.jpg", image);// // 显示// cv::imshow("原图", image);// cv::imshow("灰度图", gray);// // 等待按键// cv::waitKey(0);}

注:#include "opencv2/opencv.hpp"的时候在vscode里面会显示没有这个头文件,导致运行不了。解决方案:

方法1.鼠标放到红色波浪线位置,会有一个快速修复,点开之后将OpenCV的路径添加进去

方法2.有些vscode编译器可能没有自动添加到includepath的提示,操作如下:

案例2:读取视频信息

注:这里需要安装gflags,gflags安装教程

// 导入opencv 库
#include <opencv2/opencv.hpp>
#include <iostream>
// 导入gflags 库
#include <gflags/gflags.h>
// 定义命令行参数
DEFINE_string(video, "./media/dog.mp4", "Input video"); // 视频路径int main(int argc, char **argv)
{// 解析命令行参数gflags::ParseCommandLineFlags(&argc, &argv, true);// 读取视频:创建了一个VideoCapture对象,参数为视频路径cv::VideoCapture capture(FLAGS_video);// 判断视频是否读取成功,返回true表示成功if (!capture.isOpened()){std::cout << "无法读取视频: " << FLAGS_video << std::endl;return 1;}// 读取视频帧,使用Mat类型的frame存储返回的帧cv::Mat frame;// 灰度图cv::Mat gray_frame;// 循环读取视频帧while (true){// 读取视频帧,使用 >> 运算符或者read()函数,他的参数是返回的帧capture.read(frame);// capture >> frame;// 判断是否读取成功if (frame.empty()){std::cout << "文件读取完毕" << std::endl;break;}// 转成灰度图cv::cvtColor(frame, gray_frame, cv::COLOR_BGR2GRAY);// 显示视频帧cv::imshow("raw frame", frame);cv::imshow("gray frame", gray_frame);// 等待按键,延迟30ms,否则视频播放太快int k = cv::waitKey(30);// 按下ESC键退出if (k == 27){std::cout << "退出" << std::endl;break;}}return 0;

案例3:读取电脑摄像头信息

// 导入opencv 库
#include <opencv2/opencv.hpp>
#include <iostream>
// 导入gflags 库
#include <gflags/gflags.h>
// 定义命令行参数
DEFINE_int32(camera, 0, "Input camera"); // 摄像头编号int main(int argc, char **argv)
{// 解析命令行参数gflags::ParseCommandLineFlags(&argc, &argv, true);// 读取视频:创建了一个VideoCapture对象,参数为摄像头编号cv::VideoCapture capture(FLAGS_camera);// 设置指定摄像头的分辨率int width = 640;int height = 480;// 设置摄像头宽度和高度capture.set(cv::CAP_PROP_FRAME_WIDTH, width);capture.set(cv::CAP_PROP_FRAME_HEIGHT, height);// 判断视频是否读取成功,返回true表示成功if (!capture.isOpened()){std::cout << "无法打开摄像头: " << FLAGS_camera << std::endl;return 1;}// 读取视频帧,使用Mat类型的frame存储返回的帧cv::Mat frame;// 写入MP4文件,参数分别是:文件名,编码格式,帧率,帧大小cv::VideoWriter writer("./output/record.mp4", cv::VideoWriter::fourcc('H', '2', '6', '4'), 20, cv::Size(width, height));// 循环读取视频帧while (true){// 读取视频帧,使用 >> 运算符或者read()函数,他的参数是返回的帧capture.read(frame);// capture >> frame;// flipcv::flip(frame, frame, 1);// 显示视频帧cv::imshow("opencv demo", frame);// 写入视频writer.write(frame);// 等待按键,延迟30ms,否则视频播放太快int k = cv::waitKey(30);// 按下ESC键退出if (k == 27){std::cout << "退出" << std::endl;break;}}return 0;
}

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

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

相关文章

【Java 设计模式】设计原则

文章目录 ✨单一职责原则&#xff08;SRP&#xff09;✨开放/封闭原则&#xff08;OCP&#xff09;✨里氏替换原则&#xff08;LSP&#xff09;✨依赖倒置原则&#xff08;DIP&#xff09;✨接口隔离原则&#xff08;ISP&#xff09;✨合成/聚合复用原则&#xff08;CARP&#…

动态pv策略和组件

pv和pvc&#xff0c;存储卷&#xff1a; 存储卷&#xff1a; emptyDir 容器内部&#xff0c;随着pod销毁&#xff0c;emptyDir也会消失 不能做数据持久化 hostPath&#xff1a;持久化存储数据 可以和节点上的目录做挂载。pod被销毁了数据还在 NFS&#xff1a;一台机器&am…

Java常用类---日期时间类

日期时间类 Date类 简介 在Java中&#xff0c;Date类用来封装当前的日期和时间。Date类提供两个构造函数来初始化对象&#xff0c;如下所示。 通过Date() 使用当前日期和时间来初始化对象。 通过Date(long millisec) 来初始化对象&#xff0c;其中的参数是从1970年1月1日起…

学习笔记——C++中的循环结构 while语句

while循环语句 作用&#xff1a;满足循环条件&#xff0c;执行循环语句 语法&#xff1a;while&#xff08;循环条件&#xff09;{循环语句} 解释&#xff1a;只要循环条件的结果为真&#xff0c;就执行循环语句 以打印0-9这十个数字为例&#xff0c;特别需要注意的是&…

【python】爬取豆瓣电影排行榜Top250存储到Excel文件中【附源码】

英杰社区https://bbs.csdn.net/topics/617804998 一、背景 近年来&#xff0c;Python在数据爬取和处理方面的应用越来越广泛。本文将介绍一个基于Python的爬虫程 序&#xff0c;用于抓取豆瓣电影Top250的相关信息&#xff0c;并将其保存为Excel文件。 程序包含以下几个部…

大模型学习产品,一个月顶一年 | 对话网易有道周枫

OpenAI CEO奥特曼曾表示&#xff1a;“AI女友只不过是一个美丽的陷阱&#xff0c;AI教育才是最应该去发力的一个领域。” 场景的确定性&#xff0c;是OpenAI等一众公司尤为重视教育领域的原因所在。教与学是教育场景中的核心&#xff0c;但再将两个字进行拆解&#xff0c;教学…

OpenAI推出GPT商店和ChatGPT Team服务

&#x1f989; AI新闻 &#x1f680; OpenAI推出GPT商店和ChatGPT Team服务 摘要&#xff1a;OpenAI正式推出了其GPT商店和ChatGPT Team服务。用户已经创建了超过300万个ChatGPT自定义版本&#xff0c;并分享给其他人使用。GPT商店集结了用户为各种任务创建的定制化ChatGPT&a…

Ubuntu 卸载重装 Nvidia 显卡驱动

问题描述 我使用 airsim 的时候&#xff0c;发现 UE4 没法使用显卡&#xff0c;导致非常卡顿 输入 nvidia-smi 有显卡型号等信息的输出&#xff0c;但是进程 process 里面没有显示 airsim 和其他软件占用显卡情况 因此&#xff0c;我选择了卸载重装 一.卸载旧版本的驱动 …

error: undefined reference to ‘cv::imread(std::__ndk1::basic_string<char

使用android studio编译项目时&#xff0c;由于用到了 cv::imread&#xff08;&#xff09;函数&#xff0c;编译时却报错找不到该函数的定义。 cv::imread一般是在highgui.hpp中定义&#xff0c;因此我加上了该头文件&#xff1a; #include “opencv2/highgui/highgui.hpp” 但…

Markdown Emoji 表情大全

✍️作者简介&#xff1a;小北编程&#xff08;专注于HarmonyOS、Android、Java、Web、TCP/IP等技术方向&#xff09; &#x1f433;博客主页&#xff1a; 开源中国、稀土掘金、51cto博客、博客园、知乎、简书、慕课网、CSDN &#x1f514;如果文章对您有一定的帮助请&#x1f…

Java中的栈和队列操作,相互实现(力扣 232, 225)

栈和队列&#xff08;Java&#xff09; Java中的 栈 & 队列 操作栈的使用队列的使用 LeetCode 232. 用栈实现队列我的代码 LeetCode 225. 用队列实现栈我的代码 Java中的 栈 & 队列 操作 栈的使用 栈的方法功能Stack()构造一个空的栈E push(E e)将e入栈&#xff0c;并…

ubuntu18.04+realsenseD455制作TUM数据集

教程目录 一、本机环境二、安装RealSense SDK三、录制rosbag四、制作数据集四、安装ROS-RealSense五、测试数据集一、本机环境 Ubuntu系统ROS系统RealSense18.04melodicD455二、安装RealSense SDK 1、首先注册服务器的公钥 sudo apt-key adv --keyserver keyserver.ubuntu.co…

MySQL MHA高可用

目录 1.MHA介绍 2.搭建 MySQL MHA 1.实验思路&#xff1a; 1.mysql1(Master)、mysql2、mysql3 节点上安装 mysql5.7 2.修改 mysql1(Master)、mysql2、mysql3 节点的主机名 3&#xff0e;修改 mysql1(Master)、mysql2、mysql3 节点的 Mysql主配置文件/etc/my.cnf 4&#…

STL标准库与泛型编程(侯捷)笔记5

STL标准库与泛型编程&#xff08;侯捷&#xff09; 本文是学习笔记&#xff0c;仅供个人学习使用。如有侵权&#xff0c;请联系删除。 参考链接 Youbute: 侯捷-STL标准库与泛型编程 B站: 侯捷 - STL Github:STL源码剖析中源码 https://github.com/SilverMaple/STLSourceCo…

编程基础 - 初识Linux

编程基础 - 初识Linux 返回序言及专栏目录 文章目录 编程基础 - 初识Linux前言一、Linux发展简介二、现代Linux三、Linux系统各发行版小结 前言 为什么要学习Linux呢&#xff1f;我这Windows用得好好的&#xff0c;简单易用傻瓜式、用的人还超多&#xff01;但是我要告诉你的…

一键搭建elk

一键启动elk 1. 生成环境的脚本 setup.sh #!/usr/bin/bash# logstash enviroment mkdir -p logstash touch logstash/logstash.conf # shellcheck disableSC1078 echo input {tcp {mode > "server"host > "0.0.0.0"port > 4560codec > jso…

对回调函数的各种讲解说明

有没有跟我师弟一样的童靴~&#xff0c;学习和使用ROS节点时&#xff0c;对其中的callback函数一直摸不着头脑的&#xff0c;以下这么多回调函数的讲解&#xff0c;挨个看&#xff0c;你总会懂的O.o 回调函数怎么调用,如何定义回调函数&#xff1a; 回调函数怎么调用,如何定义…

使用Android Compose实现网格列表滑到底部的提示信息展示

文章目录 概述1 效果对比1.1 使用添加Item的办法&#xff1a;1.2 使用自定义的方法 2. 效果实现2.1 列表为空时的提示页面实现2.2 添加Item的方式代码实现2.3 使用自定义的方式实现 3. UI工具类 概述 目前大多数的APP都会使用列表的方式来呈现内容&#xff0c;例如淘宝&#x…

笔记本摄像头模拟监控推送RTSP流

使用笔记本摄像头模拟监控推送RTSP流 一、基础安装软件准备 本文使用软件下载链接:下载地址 FFmpeg软件: Download ffmpeg 选择Windows builds by BtbN 一个完整的跨平台解决方案&#xff0c;用于录制、转换和流式传输音频和视频。 EasyDarwin软件&#xff1a;Download Easy…

高性能、可扩展、分布式对象存储系统MinIO的介绍、部署步骤以及代码示例

详细介绍 MinIO 是一款流行的开源对象存储系统&#xff0c;设计上兼容 Amazon S3 API&#xff0c;主要用于私有云和边缘计算场景。它提供了高性能、高可用性以及易于管理的对象存储服务。以下是 MinIO 的详细介绍及优缺点&#xff1a; 架构与特性&#xff1a; 开源与跨平台&am…