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

人眼检测(单张图像)

生产资料私有化,是阻碍社会发展(包括学习)的一大阻力。希望更多学习资料公出供学习。

目录

实验原理

示例代码

运行结果

注意事项:


在OpenCV中使用C++对中可以读取图像文件,检测图像中的人脸和眼睛,并在检测到的眼睛位置绘制矩形框。

实验原理

在OpenCV中使用C++对图片中的人眼进行检测通常涉及以下几个步骤:

1. 加载图像:读取输入图像。

2. 灰度转换:将彩色图像转换为灰度图像,简化后续处理。

3. 人脸检测:使用预训练的人脸检测模型检测图像中的人脸区域。

4. 眼睛检测:在检测到的人脸区域内使用预训练的眼睛检测模型检测眼睛。

5. 绘制结果:在原图像上绘制检测到的眼睛的矩形框。

示例代码

#include <opencv2/opencv.hpp>
#include <iostream>int main(int argc, char** argv)
{//if (argc != 2)//{//	std::cout << "Usage: ./eye_detection [image_path]" << std::endl;//	return -1;//}// 加载图像cv::Mat image = cv::imread("4.jpg");if (image.empty()){std::cout << "Error: Could not open or find the image!" << std::endl;return -1;}// 加载人脸检测模型cv::CascadeClassifier face_cascade;if (!face_cascade.load("haarcascade_frontalface_alt.xml")){std::cout << "Error: Could not load face cascade!" << std::endl;return -1;}// 加载眼睛检测模型cv::CascadeClassifier eye_cascade;if (!eye_cascade.load("haarcascade_eye.xml")){std::cout << "Error: Could not load eye cascade!" << std::endl;return -1;}// 转换为灰度图像cv::Mat gray;cv::cvtColor(image, gray, cv::COLOR_BGR2GRAY);// 检测人脸std::vector<cv::Rect> faces;face_cascade.detectMultiScale(gray, faces, 1.1, 3, 0 | cv::CASCADE_SCALE_IMAGE, cv::Size(30, 30));// 检测每张脸中的眼睛for (const auto& face : faces){cv::Mat faceROI = gray(face);std::vector<cv::Rect> eyes;eye_cascade.detectMultiScale(faceROI, eyes, 1.1, 3, 0 | cv::CASCADE_SCALE_IMAGE, cv::Size(30, 30));// 在原图上绘制眼睛的矩形框for (const auto& eye : eyes){cv::Rect eyeRect(face.x + eye.x, face.y + eye.y, eye.width, eye.height);cv::rectangle(image, eyeRect, cv::Scalar(255, 0, 0), 2);}}// 显示结果cv::namedWindow("Eye Detection", cv::WINDOW_NORMAL);cv::imshow("Eye Detection", image);cv::waitKey(0);return 0;
}

运行结果

注意事项:

1. 模型文件:haarcascade_frontalface_alt.xml 和 haarcascade_eye.xml 是人脸和眼睛检测的预训练模型文件,确保这些文件存在于你的项目目录中,或者在load函数中提供正确的路径。

2. 编译环境:确保你的编译环境已经正确配置了OpenCV库,否则你可能需要添加额外的编译和链接指令。

3. 性能优化:在实际应用中,你可能需要调整detectMultiScale函数的参数,以平衡检测精度和性能。

4. 实时处理:如果你打算处理实时视频流,可能需要考虑更高效的处理方法,例如使用更小的检测窗口或调整视频分辨率。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 工作实战-项目压测记录
  • 如何使用cornerstone3D渲染3D影像
  • WEB应用服务器TOMCAT知识点
  • 8.26算法训练
  • 黑悟空!一区预定!原创首发!SLWCHOA-Transformer-LSTM混合改进策略的黑猩猩优化算法多变量时间序列预测
  • js中Map数据结构使用详细讲解
  • MySQL当表中新增加字段的时候,如何将该字段的值进行快速刷新成对应的值
  • 2024 AI 图像生成器工具合集
  • ssrf漏洞复现分析(1)
  • 网络安全售前入门03——审计类产品了解
  • 出现“此网站无法提供安全的连接,使用了不受支持的协议”的解决方法
  • Apache Doris安装部署
  • Catf1ag CTF Crypto(六)
  • 从零到一,2024年数据恢复软件新手到专家指南
  • MySQL集群技术详解
  • 2019.2.20 c++ 知识梳理
  • CoolViewPager:即刻刷新,自定义边缘效果颜色,双向自动循环,内置垂直切换效果,想要的都在这里...
  • CSS 专业技巧
  • Docker 笔记(1):介绍、镜像、容器及其基本操作
  • ECMAScript6(0):ES6简明参考手册
  • EOS是什么
  • HTTP请求重发
  • Javascript Math对象和Date对象常用方法详解
  • JavaScript 基本功--面试宝典
  • k个最大的数及变种小结
  • 动手做个聊天室,前端工程师百无聊赖的人生
  • 码农张的Bug人生 - 见面之礼
  • 如何学习JavaEE,项目又该如何做?
  • 译米田引理
  • 智能合约Solidity教程-事件和日志(一)
  • 阿里云重庆大学大数据训练营落地分享
  • ​软考-高级-系统架构设计师教程(清华第2版)【第20章 系统架构设计师论文写作要点(P717~728)-思维导图】​
  • # 服务治理中间件详解:Spring Cloud与Dubbo
  • #LLM入门|Prompt#3.3_存储_Memory
  • (android 地图实战开发)3 在地图上显示当前位置和自定义银行位置
  • (MTK)java文件添加简单接口并配置相应的SELinux avc 权限笔记2
  • (Note)C++中的继承方式
  • (二)c52学习之旅-简单了解单片机
  • (分布式缓存)Redis分片集群
  • (附源码)springboot工单管理系统 毕业设计 964158
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (附源码)ssm高校实验室 毕业设计 800008
  • (每日持续更新)jdk api之FileFilter基础、应用、实战
  • (每日一问)基础知识:堆与栈的区别
  • (十) 初识 Docker file
  • (十八)SpringBoot之发送QQ邮件
  • (已解决)报错:Could not load the Qt platform plugin “xcb“
  • (转)es进行聚合操作时提示Fielddata is disabled on text fields by default
  • (转)如何上传第三方jar包至Maven私服让maven项目可以使用第三方jar包
  • .htaccess配置常用技巧
  • .Net CF下精确的计时器
  • .net core 6 redis操作类
  • .NET Core 通过 Ef Core 操作 Mysql
  • .NET/C# 异常处理:写一个空的 try 块代码,而把重要代码写到 finally 中(Constrained Execution Regions)
  • .NET8 动态添加定时任务(CRON Expression, Whatever)