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

(OpenCV) 基础demo

文章目录

  • 前言
  • Demo
    • 图片
    • 录制
    • 播放
    • 人脸识别
  • END

前言

OpenCV - Open Computer Vision Library

OpenCV的名声想必不用多说了。

本文介绍4个基础使用demo。分别为,显示图片,录制视频,播放视频和一个基于开源算法库的人脸识别小demo。

只要环境配好,修改一下目标的资源就可以直接运行。

Demo

图片

#include <iostream>
#include <opencv2/opencv.hpp>void cv_image() {/// 资源路径const char *const resPath = "./myLogo.jpg";/// 打开图片的窗口名称const char *const windowName = "image-test";/// 窗口延时时间 毫秒const int windowDelayTime = 5000;cv::Mat img = cv::imread(resPath);if (img.empty()) {std::cout << "image is empty" << std::endl;return ;}/// 设置窗口名称和自适应cv::namedWindow(windowName, cv::WINDOW_AUTOSIZE);/// 将图片与窗口绑定cv::imshow(windowName, img);/// 等待键盘输入 or 延时cv::waitKey(windowDelayTime);/// 销毁窗口cv::destroyWindow(windowName);
}

录制

注意,这里的有部分参数会根据OpenCV3,4的版本问题而有一定差异。

#include <iostream>
#include <opencv2/opencv.hpp>void cv_recordVideo() {const char *const save_path = "./test.avi";const char *const windowName = "camera-test";const int waitKeyTime = 10;/// 设备的cameraID,一般笔记本自带的就是id=0int camera_id = 0;cv::VideoCapture cap;if (false == cap.open(camera_id)) {std::cout << "camera open failed!" << std::endl;return;}/// 视频的长宽const int width = cap.get(cv::CAP_PROP_FRAME_WIDTH);const int height = cap.get(cv::CAP_PROP_FRAME_HEIGHT);/// 1. 路径/// 2. 编码格式/// 3. 帧率/// 4. 尺寸cv::VideoWriter output_video;//! 第二个参数,在opencv3,4不同
#if CV_VERSION_MAJOR >= 4auto fourcc = cv::VideoWriter::fourcc('M', 'J', 'P', 'G');
#elseauto fourcc = CV_FOURCC('M', 'J', 'P', 'G'),
#endifoutput_video.open(save_path, fourcc, 30.0, cv::Size(width, height));for (cv::Mat frame;;) {cap >> frame;if (frame.empty()) {break;}cv::imshow(windowName, frame);/// 保存output_video.write(frame);/// 按下esc键退出if (27 == cv::waitKey(waitKeyTime)) {break;}} // while (1)
}

播放

注意,因为音视频各种编解码问题,此函数这样的写法并不能让所有的视频文件都能正常解析。

但至少保证,上面一个demo录制下来的视频可以播放。

#include <iostream>
#include <opencv2/opencv.hpp>void cv_showVideo() {const char *const resPath = "./test.avi";const char *const windowName = "video-test";const int windowDelayTime = 200;cv::VideoCapture cap;/// 根据当前pc对该文件的解码能力而定if (false == cap.open(resPath)) {std::cout << "open failed!" << std::endl;return;}cv::namedWindow(windowName, cv::WINDOW_AUTOSIZE);/// 视频的本质就是一张张的图片for (cv::Mat frame;;) {cap >> frame;/// 播放完毕if (frame.empty()) {break;}cv::imshow(windowName, frame);/// 按下esc键退出if (27 == cv::waitKey(windowDelayTime)) {break;}} // while (1)
}

人脸识别

开源人脸识别算法库:opencv/data/haarcascades/haarcascade_frontalface_alt.xml at master · opencv/opencv · GitHub

opencv/data/haarcascades at master · opencv/opencv · GitHub

#include <iostream>
#include <opencv2/opencv.hpp>
#include <vector>void cv_faceRecognition() {const char *const windowName = "camera-test";const int waitKeyTime = 10;/// opencv 的一个开源人脸识别库const char *const face_model_path = "./haarcascade_frontalface_alt.xml";/// 设备的cameraID,一般笔记本自带的就是id=0int camera_id = 0;/// 加载算法文件cv::CascadeClassifier face_model;if (false == face_model.load(face_model_path)) {std::cout << "face_model load failed!\n" << std::endl;return;}cv::VideoCapture cap;if (false == cap.open(camera_id)) {std::cout << "camera open failed!" << std::endl;return;}for (cv::Mat frame;;) {cap >> frame;if (frame.empty()) {break;}std::vector<cv::Rect> faces;face_model.detectMultiScale(frame, faces, 1.1, 2,0 | cv::CASCADE_SCALE_IMAGE,cv::Size(30, 30));/// 绘制人脸for (size_t i = 0; i < faces.size(); i++) {/// 点坐标cv::Point center(faces[i].x + faces[i].width / 2,faces[i].y + faces[i].height / 2);/// 画图ellipse(frame, center,cv::Size(faces[i].width / 2, faces[i].height / 2), 0, 0,360, cv::Scalar(255, 0, 255), 4, 8, 0);}cv::imshow(windowName, frame);/// 按下esc键退出if (27 == cv::waitKey(waitKeyTime)) {break;}} // while (1)
}



END

参考资料:

CMake编译OpenCV: Qt配置OpenCV教程,亲测已试过(详细版)_Wi~的博客-CSDN博客

demo: c++ opencv 显示摄像头-人脸检测_哔哩哔哩_bilibili

相关文章:

(OpenCV) 基础demo

文章目录 前言Demo图片录制播放人脸识别 END 前言 OpenCV - Open Computer Vision Library OpenCV的名声想必不用多说了。 本文介绍4个基础使用demo。分别为&#xff0c;显示图片&#xff0c;录制视频&#xff0c;播放视频和一个基于开源算法库的人脸识别小demo。 只要环境…...

using 的使用

作者: 苏丙榅 链接: https://subingwen.cn/cpp/using/ 在 C 中 using 用于声明命名空间&#xff0c;使用命名空间也可以防止命名冲突。在程序中声明了命名空间之后&#xff0c;就可以直接使用命名空间中的定义的类了。在 C11 中赋予了 using 新的功能&#xff0c;让C变得更年轻…...

Websocket、Socket、HTTP之间的关系

Websocket、Socket、HTTP之间的关系 ★ Websocket是什么&#xff1f;★ Websocket的原理★ websocket具有以下特点&#xff1a;★ webSocket可以用来做什么?★ websocket与socket区别&#xff1a;★ WebSocket与HTTP区别 ★ Websocket是什么&#xff1f; ● Websocket是HTML5下…...

hustoj LiveCD版系统在局域网虚拟机安装和配置

root权限 打开terminal命令行输入sudo su输入初始密码freeproblemsetmysql数据库的密码的位置&#xff0c;如何登陆数据库 数据库账号密码存放在两个配置文件中&#xff1a; /home/judge/etc/judge.conf/home/judge/src/web/include/db_info.inc.php 新版本中&#xff0c;快…...

读书-代码整洁之道10-14

类 类的三大特性&#xff1a;封装、继承、多态&#xff1b;类应该短小&#xff1b;单一权责原则认为&#xff0c;类或模块应有且只有一条加以修改的理由&#xff1b;当类丧失了内聚性&#xff0c;就拆分它&#xff1b;隔离修改 系统 构造和使用是非常不一样的过程。每个应用…...

UDP 广播/组播

广播UDP与单播UDP的区别就是IP地址不同&#xff0c;广播使用广播地址xxx.xxx.xxx.255&#xff0c;将消息发送到在同一广播网络上的每个主机&#xff0c;广播/组播只能用udp进行实现 函数:int setsockopt(int sockfd, int level, int optname, const void *optval, socklen_topt…...

高效创作助手:ChatGPT最新版实现批量撰写聚合文章的全新水平

随着人工智能技术的不断发展&#xff0c;ChatGPT最新版作为一款智能创作助手&#xff0c;实现了批量撰写聚合文章的全新水平。它能够在短时间内生成高质量的文章&#xff0c;极大地提高了创作效率。本文将从随机8-20个方面对ChatGPT最新版进行详细的阐述&#xff0c;让我们一起…...

Python中的包是什么,如何创建和使用包?

在Python中&#xff0c;包是一种将相关模块分组在一起的方式。它可以让我们更好地组织和重用代码。 一个Python包实际上是一个文件夹&#xff0c;其中包含该包的Python模块和其他资源文件&#xff08;例如配置文件、数据文件等&#xff09;。包的根目录通常包含一个名为__init…...

Spring Cloud Alibaba Seata(二)

目录 一、Seata 1、Seata-AT模式 1.1、具体案例 1.2、通过Seata的AT模式解决分布式事务 2、Seata-XA模式 3、Seata-TCC模式 4、Seata-SAGA模式 一、Seata 1、Seata-AT模式 概念&#xff1a;AT模式是一种无侵入的分布式事务解决方案&#xff0c;在 AT 模式下&#xff0c…...

如何在 MySQL 中使用 COALESCE 函数

1. 简介 在 MySQL 中&#xff0c;COALESCE 函数可以用来返回参数列表中的第一个非空值。如果所有参数都为空&#xff0c;则返回 NULL。本文将介绍 COALESCE 函数的语法和用法&#xff0c;并通过示例演示其效果。 2. 语法 COALESCE 函数的语法如下所示&#xff1a; COALESCE(…...

Python爬虫之Scrapy框架系列(22)——初识分布式爬虫scrapy_redis

目录: 分布式爬虫(Scrapy\_redis):1.简单介绍:2.Scrapy_redis的安装:分布式爬虫(Scrapy_redis): 官方文档:https://scrapy-redis.readthedocs.io/en/stable/1.简单介绍: scrapy_redis是一个基于Redis的Scrapy组件,用于scrapy项目的分布式部署和开发。 特点: 分布…...

ChatGPT的前世今生

原文首发于博客文章ChatGPT发展概览 ChatGPT 是OpenAI开发的人工智能聊天机器人程序&#xff0c;于2022年11月推出。该程序使用基于 GPT-3.5、GPT-4 架构的大语言模型并以强化学习训练。ChatGPT目前仍以文字方式交互&#xff0c;而除了可以用人类自然对话方式来交互&#xff0c…...

WireShark常用协议抓包与原理分析

1.ARP协议(地址解析协议) nmap 发现网关nmap -sn 192.168.133.2wireshark 抓请求包和响应包 arp请求包内容 arp响应包内容 总结:请求包包含包类型(request),源IP地址,源MAC地址,目标IP地址,目标MAC地址(未知,此处为全0);响应包包含包类型(reply),源IP地址,源…...

Mysql数据库操作总结

文章目录 1. DDL(Data Definition Language - 数据定义语言)1.1 数据库1.2 数据表(创建查询删除)1.3 数据表(修改) 2. 数据类型2.1 数值2.2 字符2.3 日期 3. 字段约束3.1 约束3.2 主键约束修改3.3 主键自增 联合主键 4. DML(Data Manipulation Language - 数据操作语言)4.1 添…...

在 ZBrush、Substance 3D Painter 和 UE5 中创作警探角色(P2)

大家好&#xff0c;下篇分享咱们继续来说警探角色的重新拓扑、UV、材质贴图和渲染处理。 重新拓扑/UV 这是对我来说最不有趣的部分——重新拓扑。它显然是实时角色中非常重要的一部分&#xff0c;不容忽视&#xff0c;因为它会影响大量的 UV、绑定和后期渲染&#xff0c;这里…...

如何在大规模服务中迁移缓存

当您启动初始服务时&#xff0c;通常会过度设计以考虑大量流量。但是&#xff0c;当您的服务达到爆炸式增长阶段&#xff0c;或者如果您的服务请求和处理大量流量时&#xff0c;您将需要重新考虑您的架构以适应它。糟糕的系统设计导致难以扩展或无法满足处理大量流量的需求&…...

【GPT LLM】跟着论文学习gpt

GPT1开山之作&#xff1a;Improving language understanding by generative pre-training 本文提出了gpt1&#xff0c;即使用无标签的数据对模型先进行训练&#xff0c;让模型学习能够适应各个任务的通用表示&#xff1b;后使用小部分 task-aware的数据对模型进行微调&#xff…...

【玩转Docker小鲸鱼叭】Docker容器常用命令大全

在 Docker 核心概念理解 一文中&#xff0c;我们知道 Docker容器 其实就是一个轻量级的沙盒&#xff0c;应用运行在不同的容器中从而实现隔离效果。容器的创建和运行是以镜像为基础的&#xff0c;容器可以被创建、销毁、启动和停止等。本文将介绍下容器的这些常用操作命令。 1、…...

专项练习11

目录 一、选择题 1、执行下列选项的程序&#xff0c;输出结果不是Window对象的是&#xff08;&#xff09; 2、以下哪些代码执行后 i 的值为10&#xff1a; 二、编程题 1、判断 val1 和 val2 是否完全等同 2、统计字符串中每个字符的出现频率&#xff0c;返回一个 Object&…...

ASP.NET+SQL通用作业批改系统设计(源代码+论文)

随着网络高速地融入当今现代人的生活,学校对网络技术的应用也在不断地提高。学校的教学任务十分复杂,工作也很繁琐,在教学任务中,作业的批改也是一个很重要的环节。为了提高老师工作效率,减轻教师的工作强度,提高作业批改的灵活性,《通用作业批改系统》的诞生可以说是事在…...

Python|GIF 解析与构建(5):手搓截屏和帧率控制

目录 Python&#xff5c;GIF 解析与构建&#xff08;5&#xff09;&#xff1a;手搓截屏和帧率控制 一、引言 二、技术实现&#xff1a;手搓截屏模块 2.1 核心原理 2.2 代码解析&#xff1a;ScreenshotData类 2.2.1 截图函数&#xff1a;capture_screen 三、技术实现&…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端

&#x1f31f; 什么是 MCP&#xff1f; 模型控制协议 (MCP) 是一种创新的协议&#xff0c;旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议&#xff0c;它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...

Module Federation 和 Native Federation 的比较

前言 Module Federation 是 Webpack 5 引入的微前端架构方案&#xff0c;允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...

ElasticSearch搜索引擎之倒排索引及其底层算法

文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...

在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?

uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件&#xff0c;用于在原生应用中加载 HTML 页面&#xff1a; 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...

sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!

简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求&#xff0c;并检查收到的响应。它以以下模式之一…...

CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)

漏洞概览 漏洞名称&#xff1a;Apache Flink REST API 任意文件读取漏洞CVE编号&#xff1a;CVE-2020-17519CVSS评分&#xff1a;7.5影响版本&#xff1a;Apache Flink 1.11.0、1.11.1、1.11.2修复版本&#xff1a;≥ 1.11.3 或 ≥ 1.12.0漏洞类型&#xff1a;路径遍历&#x…...

【Redis】笔记|第8节|大厂高并发缓存架构实战与优化

缓存架构 代码结构 代码详情 功能点&#xff1a; 多级缓存&#xff0c;先查本地缓存&#xff0c;再查Redis&#xff0c;最后才查数据库热点数据重建逻辑使用分布式锁&#xff0c;二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...

Windows安装Miniconda

一、下载 https://www.anaconda.com/download/success 二、安装 三、配置镜像源 Anaconda/Miniconda pip 配置清华镜像源_anaconda配置清华源-CSDN博客 四、常用操作命令 Anaconda/Miniconda 基本操作命令_miniconda创建环境命令-CSDN博客...

Spring AI Chat Memory 实战指南:Local 与 JDBC 存储集成

一个面向 Java 开发者的 Sring-Ai 示例工程项目&#xff0c;该项目是一个 Spring AI 快速入门的样例工程项目&#xff0c;旨在通过一些小的案例展示 Spring AI 框架的核心功能和使用方法。 项目采用模块化设计&#xff0c;每个模块都专注于特定的功能领域&#xff0c;便于学习和…...