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.hqwc.cn/news/344292.html

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

相关文章

win10在启动游戏时报错,提示“d3dx9_25.dll文件丢失”,怎么办?d3dx9_25.dll丢失如何自动修复

一、d3dx9_25.dll文件是什么&#xff1f; d3dx9_25.dll是DirectX的一部分&#xff0c;DirectX是一种由微软开发的专门处理与多媒体、游戏程序和视频相关的应用程序接口。d3dx9_25.dll文件是DirectX9中一个重要的dll文件&#xff0c;主要负责处理3D图形程序&#xff0c;作用是帮…

React Native 环境安装

Notion – The all-in-one workspace for your notes, tasks, wikis, and databases. 搭建开发环境 React Native 中文网 Homebrew&#xff08;包管理器&#xff09; → rvm&#xff08;ruby版本管理&#xff09; → ruby → cocoapods 安装 Homebrew Homebrew /bin/ba…

PHP版学校教务管理系统源码带文字安装教程

PHP版学校教务管理系统源码带文字安装教程 运行环境 服务器宝塔面板 PHP 7.0 Mysql 5.5及以上版本 Linux Centos7以上 系统介绍&#xff1a; 后台权限控制&#xff1a;支持多个管理员&#xff0c;学生管理&#xff0c;学生成绩&#xff0c;教师管理&#xff0c;文章管理&#x…

Mini Event 抢先看!本周六共聚香港,展望 2024 波卡新机遇

2023 冬季波卡黑客松已经进入最终阶段&#xff0c;火热的开发实战比赛之旅以外&#xff0c;我们还为所有 Web3er 准备了一场精彩纷呈的「年终盛会」。来自区块链各领域的技术大咖、行业领军人、亚马逊云科技专家等一线大咖将共聚香港&#xff0c;参与本届黑客松的 Mini Event 活…

CDH 6.3启动失败,由于日志写入权限原因导致cloudera-scm-server.log未生成

CDH 6.3启动失败&#xff0c;CM之前都能正常启动&#xff0c;服务器重启后&#xff0c;启动出现异常&#xff0c;需要排查具体错误&#xff0c;查看日志&#xff0c;发现日志cloudera-scm-server.log也未生成&#xff0c;不好定位具体原因。于是查看cloudera-scm-server状态&am…

Docker数据持久化

数据持久化 在容器层的 UnionFS&#xff08;联合文件系统&#xff09;中对文件/目录的任何修改&#xff0c;无论是手工修改还是 容器在运行过程中的修改&#xff0c;在该容器丢失或被删除后这些修改将全部丢失。即这些修改是无 法保存下来的。若要保存下来这些修改&#xff0c;…

深入 Move 生态,探秘铭文热潮背后的思考

Move 语言是 Meta&#xff08;Facebook&#xff09;在 2018 年开发的新一代智能合约编程语言。回顾过去的一年&#xff0c;Aptos 与 Sui 主网上线&#xff0c;为整个 Web3 开启了下一个十亿用户服务的新征程。Rooch、Initia、MoveMent 等多条使用 Move 语言的区块链网络涌现&am…

预约上门按摩系统目前面临的挑战有哪些

按摩预约上门服务系统上线之后在运营的过程中主要面临的挑战主要有以下几个方面&#xff1a; 1.技师管理和培训&#xff1a;为了保证服务的质量&#xff0c;需要对技师进行管理和培训。这包括确保技师具备必要的技能和资格&#xff0c;以及提供必要的培训&#xff0c;以确保他们…

Jenkins创建maven项目

Jenkins创建maven项目 环境准备 如果在项目没有看到maven&#xff0c;需要下载插件 本机需要有maven&#xff0c;并且maven配置过国内镜像&#xff0c;否则很大概率插件下不下来&#xff0c;如果有docker之前没有配置过需要进入docker手动配置。 需要在全局中配置maven的set…

Notepad++安装步骤

Notepad是一款文本编辑工具&#xff0c;支持27种编程语言&#xff0c;通吃C,C ,Java ,C#, XML, HTML, PHP,JS 等&#xff0c;该软件拥有完整的中文化接口及支持多国语言编写的功能&#xff0c;不仅可以用来制作一般的纯文字说明文件&#xff0c;还非常适合编写计算机程序代码&a…

C桑(Cython)从入坑到入土(1)

Cython 概览 Cython 是一个将类似 Python 的代码文件编译为 C 代码的编译器。尽管如此&#xff0c;“Cython 不是 Python 到 C 的翻译器”。也就是说&#xff0c;它不会将完整的程序"转换为 C"------相反&#xff0c;结果会充分利用 Python 运行时环境。一种看待它…

MES系统中的设备管理及设备数据采集

随时工厂数字化建设的大力推进&#xff0c;设备管理的效率得到了很大的提升&#xff0c;特别是作为机加工企业&#xff0c;设备是整个企业非常重要的核心资产。 一、设备进行数据采集面临痛点&#xff1a; 设备数据状况无法获取与掌握 设备老旧&#xff0c;信息化基础差&…