OpenCV小练习:人脸检测

news2024/11/15 17:56:16

OpenCV自带人脸检测模型,拿来就能用。所以“人脸检测”这个任务对于OpenCV而言真是太简单了——感叹一下:OpenCV太强大了!相关的介绍文章在网上可以搜到很多,原本我觉得没必要再写一篇了。结果我在写练习代码的时候,还是碰到了一些新问题,值得记录一下。

人脸检测需要用到opencv_objdetect模块。我们在之前介绍OpenCV编译的时候没有用到这个模块,这次就要补充编译一下了。需要注意这几个项目的依赖关系:opencv_objdetect依赖opencv_dnn,而opencv_dnn又依赖libprotobuf。

我们先编译OpenCV自带的libprotobuf(在3rdparty目录里),结果碰到一堆莫名其妙的错误,苦恼了5分钟……

2>D:\Dev\GitHub\opencv\3rdparty\protobuf\src\google\protobuf\arena.cc(108,49): error C2511: “google::protobuf::internal::SerialArena::SerialArena(google::protobuf::internal::SerialArena::Block *,void *)”:“google::protobuf::internal::SerialArena”中没有找到重载的成员函数

2>D:\Dev\GitHub\vcpkg\installed\x64-windows\include\google/protobuf/arena_impl.h(204): message : 参见“google::protobuf::internal::SerialArena”的声明

What?! 怎么会有vcpkg?OpenCV自带了protobuf源码,何必再麻烦vcpkg。王阳明也说了,“吾性自足,不假外求。”赶紧打开libprotobuf的项目属性页,把Use Vcpkg设置成“否”。然后重新编译,顺利通过!接着在编译opencv_dnn项目时也需要做相同的调整。

libprotobuf和opencv_dnn两个项目编译通过后,接着编译opencv_objdetect,不出意外的话就能顺利通过了。然后我们就可以在OpenCVMisc项目中演练起来了。

OpenCVMisc项目设置需要做些小修改:

附加包含目录增加:

..\opencv\modules\objdetect\include

附加依赖项增加:

(Debug版本) ..\opencv\build\lib\Debug\opencv_objdetect4100d.lib

(Release版本) ..\opencv\build\lib\Release\opencv_objdetect4100.lib

并且把opencv_objdetect4100.dll和opencv_objdetect4100d.dll从OpenCV项目中拷贝到OpenCVMisc项目中。

接着,在OpenCVMiscDlg.cpp文件头上增加:

#include <opencv2/objdetect.hpp>

再编写测试代码,如下:

cv::CascadeClassifier faceClassifier;
// 加载级联分类器
if (!faceClassifier.load(".\\assets\\haarcascade_frontalface_alt.xml")) {
    std::cout << "Failed to load classifier." << std::endl;
    return;
}

Mat srcImage = imread(".\\assets\\ruok.png");
if (srcImage.empty()) return;

// 灰度化处理
Mat gray;
cv::cvtColor(srcImage, gray, COLOR_BGR2GRAY);

// 直方图均衡化,增强对比度
cv::equalizeHist(gray, gray);

std::vector<Rect> faces;
faceClassifier.detectMultiScale(gray, faces);
for each (Rect face in faces) {
    cv::rectangle(srcImage, face, Scalar(0, 255, 0));
}

imshow("Face Detection", srcImage);

haarcascade_frontalface_alt.xml是已经训练好的人脸模型,是从OpenCV源码工程中拷贝出来的。(注:OpenCV开源项目的data目录下还有蛮多其他模型,有兴趣的话都可以试试。)上面的代码逻辑过于简单,就不解释了😂

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

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

相关文章

【王树森】RNN模型与NLP应用(3/9):Simple RNN模型(个人向笔记)

前言 现在RNN已经没有以前那么流行了。在数据量大的情况下不如Transformer&#xff0c;但是在小数据的情况下仍然表现良好。 How to model sequential data? 1. one to one模型 像MLP和CNN&#xff0c;还有前面两节课讲到的二分类问题&#xff0c;都是基于one to one模型&a…

安装jmeter的梯度压测线程组(Custom Thread Groups)的插件

1、打开&#xff1a;Install :: JMeter-Plugins.org 2、进入主页后点击下面图片的链接进行安装 3、将安装包放入apache-jmeter-5.4.1 > lib > ext 里面 4、打开Jmeter 点击下面的【Plugins Manager】 5、进入 【Plugins Manager】后选择【Avaliable Plug…

Apache Flink 零基础入门(二):开发环境搭建和应用的配置、部署及运行

关联比赛: Apache Flink极客挑战赛——Flink TPC-DS性能优化 作者&#xff1a;沙晟阳 本文是根据 Apache Flink 系列直播课程整理而成&#xff0c;由阿里巴巴高级开发工程师沙晟阳分享&#xff0c;主要面向于初次接触 Flink、或者对 Flink 有了解但是没有实际操作过的同学。…

【分布式定时任务】XXL-JOB_2.4.1部署与实战

部署 分布式任务调度平台XXL-JOBXXL-JOB是一个轻量级分布式任务调度平台&#xff0c;其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线&#xff0c;开箱即用。https://www.xuxueli.com/xxl-job/ 一 数据库配置 执行初始化数据库…

flutter和原生Android以及IOS开发相比有什么优缺点?

Flutter 是 Google 开发的一个开源移动应用开发框架&#xff0c;它使用 Dart 语言编写。Flutter 的主要目标是使开发者能够从单一的代码库构建高性能、高保真的应用程序&#xff0c;这些应用程序可以在 iOS 和 Android 平台上运行&#xff0c;同时保持原生应用的感觉。 Flutte…

tomcat架构设计分析,核心组件详解

提示&#xff1a;tomcat整体架构分析&#xff0c;tomcat核心组件详解、tomcat请求全流程、tomcat设计模式分析。责任链模式设计、tomcat设计详解、tomcat调优的前置文档 文章目录 前言一、相关概念1、tomcat的概念2、web应用部署的3种方式 二、tomcat的整体架构1、tomcat架构图…

三星与海力士发力决战HBM4

在8月中旬&#xff0c;三星宣布正在加速推进下一代HBM&#xff08;High Bandwidth Memory&#xff09;的研发&#xff0c;目标是在今年年底前完成HBM4的设计定稿&#xff08;tape-out&#xff09;。而SK海力士则继续保持其竞争力&#xff0c;计划在10月份完成HBM4的设计定稿&am…

华为云征文|部署私有云和文档管理系统 Kodcloud

华为云征文&#xff5c;部署私有云和文档管理系统 Kodcloud 一、Flexus云服务器X实例介绍1.1 云服务器介绍1.2 应用场景1.3 对比普通ECS 二、Flexus云服务器X实例配置2.1 重置密码2.2 服务器连接2.3 安全组配置 三、部署 Kodcloud3.1 Jellyfin 介绍3.2 Docker 环境搭建3.3 Jell…

Linux内核6.12新特性:panic之后扫码显示故障信息

Linux 内核 6.12 版本即将引入一项有趣的功能——在内核Panic时显示一个可选的二维码。这一功能将允许用户通过扫描二维码直接访问内核Panic信息的日志&#xff0c;从而更容易地诊断问题所在。 这不是 Linux 第一次尝试使用二维码。早在2014年&#xff0c;就有过关于在内核Pani…

docker-compose容器及Dockerfile的使用

软件资源&#xff1a; 链接: https://pan.baidu.com/s/1iYMP7p7v_HUMc9vakIQfbQ?pwd6fes 提取码: 6fes docker-compose容器 部署nmt---nginxcomposetomcat项目 使用基础的docker指令来创建镜像&#xff0c;实现项目的发布。 Dockerfile--->docker-compose 背景&#x…

[知识技巧] iPhone 15 卡在恢复模式修复方法

如果您发现您的iPhone 15 卡在恢复模式下&#xff0c;这可能是一次相当紧张的经历&#xff0c;尤其是当它阻止您使用手机时。请放心&#xff0c;这是许多 iPhone 用户面临的共同挑战。幸运的是&#xff0c;有一些行之有效的方法可以解决此问题并将您的 iPhone 恢复到正常功能。…

启动盘如何复原

条件&#xff1a; 本教程适合Windows系统 通过Diskpart CMD启动U盘还原U盘在Windows中还有CMD命令可以使用 先“WindowsR”呼出运行窗口&#xff0c;在命令行中搜索"Diskpart"。点击回车输入“list disk”并且回车输入“select disk X”(X为替换可启动u盘的磁盘号)…

Vite项目启动服务器时报错 Error: Cannot find module @rollup/rollup-win32-x64-msvc.

前言&#xff1a; 网上找了很多方法&#xff0c;尝试后都不行。在某篇文章评论区种找到了一种方法解决了&#xff0c;谨以此篇文章记录解决问题的方案&#xff0c;方便日后使用。 解决方法&#xff1a;github链接 Cannot find module rollup/rollup-win32-x64-msvc (rollup 4.…

idea配置连接数据库的操作方法(适配不同版本)

文章目录 一、IDEA找不到database图标的解决方法二、链接数据库 一、IDEA找不到database图标的解决方法 首先很多小伙伴说我左右侧边栏都找了找不到数据库图标 解决办法&#xff1a; 第一种&#xff1a;选择 View --> Tool Windows --> Database 如果你的idea版本在这里…

昂瑞微IPO:华为、小米看重的国产射频芯片,“腾飞”了吗?

从一些科技大厂的投资动向中&#xff0c;往往能够发现一些新的技术力量正在酝酿。 据悉&#xff0c;近日&#xff0c;小米、华为投资的射频芯片供应商——北京昂瑞微电子技术股份有限公司&#xff08;以下简称“昂瑞微”&#xff09;在北京证监局办理辅导备案登记&#xff0c;…

docker简单私有仓库的搭建

示例&#xff1a; 【搭建简单的Registry仓库】 1. 下载 Registry 镜像 [rootdocker ~]# docker pull registry #可以查看开放的端口&#xff0c;需要把端口暴露出来 [rootdocker ~]# docker history registry:latest [rootdocker ~]# docker run -d -p 5000:5000 --restartal…

若依微服务ruoyi-auth在knife4j中不显示问题解决

关于若依微服务ruoyi-auth在knife4j中不显示问题解决 解决办法 一、添加swagger依赖文件 在ruoyi-auth模块下的pom.xml文件中添加ruoyi-common-swagger依赖 <!-- RuoYi Common Swagger --><dependency><groupId>com.ruoy

DS1202ZE - 零碎使用记录

文章目录 DS1202ZE - 零碎使用记录概述笔记测量通道频率是使用频率测量还是内建的频率计测量&#xff1f;如何让Ultra Sigma检测到DS1202ZE?如何消除过多的测量结果?通过UltraScope对示波器屏幕进行截图END DS1202ZE - 零碎使用记录 概述 手头在使用DS1202ZE, 将零碎的操作…

javascript网页设计案例详细讲解

​ 大家好&#xff0c;我是程序员小羊&#xff01; 前言&#xff1a; 我们将以深入讲解一个基于JavaScript的网页设计案例。这个案例不仅涵盖了基础的DOM操作、事件处理和动画效果&#xff0c;还将涉及更高级的主题&#xff0c;如异步数据加载、表单验证、模块化设计和响应式布…

【动态规划】两个数组 / 字符串的dp问题(子序列、子数组问题、匹配问题、字符串问题)

文章目录 前言算法题1.最长公共子序列2.不相交的线3.不同的子序列4.通配符匹配5.正则表达式匹配6.交错字符串7.两个字符串的最小ASCII删除和8.最长重复子数组 前言 两个数组或字符串的动态规划问题通常涉及到比较和匹配元素。以下是两个常见的例子&#xff1a; 最长公共子序列…