(OpenCV) 基础demo

news/2024/9/12 16:07:35/

文章目录

  • 前言
  • 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


http://www.ppmy.cn/news/489158.html

相关文章

音质更进一步,更耐用的骨传导耳机,南卡Runner Pro 4S上手

骨传导耳机是一种非常适合户外使用的耳机&#xff0c;很多喜欢运动的朋友都会配备一副&#xff0c;户外健身的时候会一直戴着。这种耳机使用时不入耳&#xff0c;通过震动颧骨来传递声音&#xff0c;不影响我们和别人的正常交流&#xff0c;户外也可以清楚感知车流、鸣笛的声音…

NOTA-P2-RM26,分子式:C73H110N18O19

英文名&#xff1a;NOTA-P2-RM26 分子式&#xff1a;C73H110N18O19 分子量&#xff1a;1543.8 g/mol 纯度&#xff1a;98% 结构式&#xff1a; 其它列表&#xff1a; Maleimide-DOTA 1006711-09-5 DOTA-NHS ester 170908-81-3 NOTA-NHS ester 137076-54-1 DOTA-tris(tB…

DAVSE VCC-H110 20倍高清会议摄像机

1.变焦倍率: 光学 20X, 数字 12X 2.视频输出: 可同时输出IP3G-SDIHDMI 3.SDI/HDMI 输出格式zui高 1080p60, 59.94; IP 输出格式zui高 1080P30. 4.静音驱动设计 5.控制方式: RS232, RS422/485, IP Onvif, 红外遥控. 6.静音驱动设计&#xff0c;转动速度可调&#xff0c; 6…

主板开启网络唤醒_华硕主板网络唤醒 WOL 的设置与实现

WOL,即网络唤醒功能,是主板网卡的一个基本功能了,几乎所有的主板搭载的板载网卡都具备这个 WOL 的能力。 不同型号的板载网卡的WOL功能的实现,其设置的办法也有所不同。 下面我们将就一些常见的板载网卡的网络唤醒如何设置做一下总结。 目前华硕主板板载网卡主要是两个厂家…

这来的去的给的欠的 算一种褒奖

这来的去的给的欠的 算一种褒奖。拿了2项 2023 Best KLAS

【UE 从零开始制作坦克】10-炮弹溅射伤害

目录 一、解决炮弹穿过坦克炮塔问题 二、炮弹溅射伤害 效果 一、解决炮弹穿过坦克炮塔问题 打开“PHYS_West_Tank_M1A1Abrams”这个物理资产 造成这种现象的原因是&#xff0c;炮弹只会与如下紫色区域产生碰撞事件 选中坦克炮塔的骨骼 添加盒体外形 缩放盒体外形使其包裹住…

雷军鸿蒙系统强势来袭,小米雷军:只要华为愿意联合起来,开放鸿蒙系统和麒麟芯片!...

说起华为&#xff0c;一直以来都是国产手机的代表&#xff0c;不论从销量还是业务发展&#xff0c;一直以来都引领中国手机行业的老大&#xff01; 当然&#xff0c;近日来华为被谷歌政策限制&#xff0c;在海外市场受到了很多损失。国产手机系统的开发的话题再次推上了风口浪尖…

高通骁龙麒麟鸿蒙,神U看点:鸿蒙+麒麟1020华为Mate40、骁龙865+版小米10S

神U看点&#xff1a;鸿蒙麒麟1020华为Mate40、骁龙865版小米10S新机曝光&#xff01; 神U看点&#xff1a;鸿蒙麒麟1020华为Mate40新机曝光 曝光麒麟1020采用5nm工艺制程&#xff0c;或将采用ARM Cortex-A78架构&#xff0c;性能更强。首发鸿蒙首发麒麟1020华为Mate40新机曝光。…

kirin710f是什么处理器_荣耀Play3采用的麒麟710F处理器有什么特点

为了在手机核心性能上进行突破&#xff0c;荣耀Play3采用了麒麟710F高性能八核处理器&#xff0c;麒麟710的升级版&#xff0c;能够根据任务&#xff0c;智能调度核心&#xff0c;达到省电效果。采用与710芯片不同的FCCSP封装工艺&#xff0c;相比710减少了芯片体积重新规划了架…

kirin710f是什么处理器_我告诉你kirin710f是什么处理器

kirin710f就是麒麟710F处理器&#xff0c;麒麟710F其实就是麒麟710处理器&#xff0c;不过需要注意的是&#xff0c;麒麟710F和麒麟710的主要区别在封装工艺上&#xff0c;除此之外在芯片主频和架构上是一致的&#xff0c;而且整体的设计规格也是相同的。 华为手机使用技巧&…

kirin710f是什么处理器_我告诉你麒麟710f相当骁龙什么处理器

麒麟710f相当于骁龙660处理器&#xff0c;关于麒麟710f处理器需要了解的是&#xff0c;麒麟710f在配置参数上是与麒麟710一样的&#xff0c;只不过麒麟710f和麒麟710在封装工艺上是不同的。 手机使用技巧&#xff1a;以EMUI9.X系统为例&#xff0c;在使用手机的时候&#xff0c…

【FreeRtos学习笔记】STM32 CubeMx——Mail(邮箱)

1 邮箱 邮箱是特殊的队列&#xff0c;具有如下特点&#xff1a; 队列长度只有1。写邮箱&#xff1a;新数据覆盖旧数据 &#xff0c;既然是覆盖&#xff0c;那么无论邮箱中是否有数据&#xff0c;这些函数总能成功写入数据。读邮箱&#xff1a;读数据时&#xff0c;数据不会被…

kirin710f是什么处理器_华为kirin710f处理器相当于骁龙几

华为kirin710f处理器相当于高通骁龙636&#xff0c;麒麟710f是一个中端处理器&#xff0c;麒麟710采用4乘以A73 2.2GHz4乘以A53 1.7GHz&#xff0c;独立DSP&#xff0c;ISP加持&#xff0c;支持LTE Cat.12/13&#xff0c;双卡双4G双voLTE&#xff0c;而荣耀8x搭载的是麒麟710f处…

麒麟985处理器怎么样?

最近上网时&#xff0c;发现很多朋友对于荣耀30系列首发的麒麟985处理器非常感兴趣&#xff0c;作为一个从事手机行业很多年的人士&#xff0c;今天就在这里和大家聊一聊&#xff0c;荣耀30系列首发的麒麟985处理器究竟怎么样&#xff1f; 首先在5G解决方案方面&#xff0c;麒…

荣耀play3鸿蒙系统的试验机吗,关于荣耀Play3你不知道的两大误区,“吓人的技术”再次升级...

原标题&#xff1a;关于荣耀Play3你不知道的两大误区&#xff0c;“吓人的技术”再次升级 荣耀Play系列主推线下市场&#xff0c;一直以来借着较低的价格以及不错的性能吸引住了不少线下消费者&#xff0c;是荣耀打通线下市场的“先锋军”。 参数 在外观方面&#xff0c;荣耀Pl…

华为鸿蒙是个系统还是个芯片,小米高管发话:只要华为愿意开放鸿蒙和麒麟芯片,小米愿意支持华为...

本文来源&#xff1a;数码圈资讯&#xff0c;更多内容请关注原创作者 原文&#xff1a;小米高管发话&#xff1a;只要华为愿意开放鸿蒙和麒麟芯片&#xff0c;小米愿支持华为 华为目前是所有国产手机厂商当中最有研发实力的&#xff0c;从整个手机厂商的技术积累和研发投入上来…

小米青春版路由器刷openwrt

下载小米路由器R1CL开发版 通过手动上传更新&#xff0c;更改固件版本 将之前地址栏URL中的 /web/home#router 替换为&#xff08;密码为admin&#xff09; /api/xqsystem/set_name_password?oldPwd123456789&newPwdadmin如果网页返回 {“code”:0} &#xff0c;则说明修…

狙击小米+高通?余承东为首款7nm麒麟980打Call!

作者 | 琥珀 责编 | 阿司匹林 出品 | AI科技大本营&#xff08;公众号ID&#xff1a;rgznai100&#xff09; 又是一年德国 IFA&#xff0c;等待了整整 365 天之后&#xff0c;华为新一代 AI 芯片麒麟 980 准时亮相世人眼中。不过&#xff0c;此次为荣耀站台的并非荣耀总裁赵明&…

如何开启小米路由器的ssh功能

文章目录 一、前言二、工具下载三、用法1.开启ssh2.改密码3.关闭ssh 四、链接总结 一、前言 本文只针对小米&#xff08;Redmi&#xff09;路由器&#xff0c;其他路由器请另请高明 其实在网上有很多把路由器刷成开发板后开起的方法&#xff0c;但我家路由器恰好没USB&#xf…