一、下载Opencv源码并使用CMake构建工具编译源码 ?
Opencv源码地址:https://opencv.org/releases/
Github的Opencv地址:GitHub - opencv/opencv: Open Source Computer Vision Library
1、本文用到的所有文件包括opencv编译好的源码
https://pan.baidu.com/s/1ZINU8pbva1vur5GhKtu9Aw?pwd=d6u5
通过网盘分享的文件:opencv.zip等3个文件
链接: 提取码: d6u5
2、工具 Visual Studio 2022
1)、第一步 点开项目 点击最底下属性
2)、点开VC++目录
设置下载好的opencv路径,如下:
3)、VC++目录下,添加库目录
4)、向下找到链接器,点开输入,里面有个附加依赖项
写入"opencv_world480d.lib",版本不同参考这个模板opencv_worldxxxd.lib
5)、添加系统环境变量
添加用户或者系统path下添加bin,这步结束后记得重启电脑让环境变量生效,否则会找不到
3、图片面部检测代码
#include <opencv2/imgcodecs.hpp> // 用于图像读取和写入
#include <opencv2/highgui.hpp> // 用于图像显示窗口和用户交互
#include <opencv2/imgproc.hpp> // 用于图像处理
#include <opencv2/objdetect.hpp> // 用于对象检测,例如人脸检测
#include <iostream> // 用于标准输入输出
#include <vector> // 用于存储检测结果的矩形容器
using namespace cv; // 简化OpenCV命名空间引用
using namespace std; // 简化标准命名空间引用
面部检测 //
int main()
{
// 指定要加载的图像路径
// # Resources是本项目下的一个文件夹,可执行创建,或者指定绝对路径
string imgpath = "Resources/face.png";
// 读取图像文件并存储到Mat对象中
Mat img = imread(imgpath);
// 创建级联分类器对象
CascadeClassifier casca;
// 加载用于人脸检测的XML文件(级联分类器)
casca.load("Resources/haarcascade_frontalface_default.xml");
// 检查XML文件是否加载成功
if (casca.empty()) {
cout << "xml文件不存在" << endl;
return -1; // 如果加载失败,返回-1以终止程序
}
// 定义一个vector来存储检测到的人脸矩形区域
vector<Rect> faces;
// 检测人脸并将结果存储到faces向量中
casca.detectMultiScale(img, faces, 1.1, 10);
// 遍历检测到的每个面部区域
for (int i = 0; i < faces.size(); i++) {
// 绘制矩形框来标记检测到的人脸
rectangle(img, faces[i].tl(), faces[i].br(), Scalar(255, 0, 255), 3);
// 打印检测到的人脸的四个角点的坐标,可选
cout << "-------------------------------------------------" << endl;
Point topLeft = faces[i].tl(); // 左上角坐标
Point bottomRight = faces[i].br(); // 右下角坐标
cout << "脸—> " << i + 1 << ": 顶部坐标 (" << topLeft.x << ", " << topLeft.y << ")"
<< " - 底部坐标 (" << bottomRight.x << ", " << bottomRight.y << ")" << endl;
cout << "-------------------------------------------------" << endl;
}
// 在窗口中显示标记后的图像
imshow("Image", img);
// 等待按键输入来关闭窗口
waitKey(0);
return 0; // 程序执行结束
}
4、视频面部检测代码
#include <opencv2/imgcodecs.hpp> // 用于图像读取和写入
#include <opencv2/highgui.hpp> // 用于创建图像显示窗口
#include <opencv2/imgproc.hpp> // 用于图像处理操作
#include <opencv2/objdetect.hpp> // 用于对象检测,例如人脸检测
#include <iostream> // 用于标准输入输出
#include <vector> // 用于存储检测结果的矩形区域
using namespace cv; // 使用OpenCV命名空间
using namespace std; // 使用标准命名空间
int main()
{
VideoCapture cap(0); // 打开默认摄像头捕获视频流
Mat img; // 存储从摄像头读取的每一帧图像
CascadeClassifier casca; // 创建级联分类器对象
casca.load("Resources/haarcascade_frontalface_default.xml"); // 加载人脸检测的XML文件
if (casca.empty()) cout << "xml文件不存在" << endl; // 检查XML文件是否成功加载
while (1) // 无限循环进行视频帧处理
{
cap.read(img); // 读取摄像头的当前帧
flip(img, img, 1); // 水平翻转图像,使显示效果符合直观预期
vector<Rect> faces; // 定义向量存储检测到的人脸区域
casca.detectMultiScale(img, faces, 1.1, 10); // 进行人脸检测
for (int i = 0; i < faces.size(); i++) // 遍历检测到的所有人脸
{
// 在图像上绘制矩形框来标记人脸区域
rectangle(img, faces[i].tl(), faces[i].br(), Scalar(255, 0, 255), 3);
// 输出每个人脸的坐标信息,可选
cout << "-------------------------------------------------" << endl;
Point topLeft = faces[i].tl(); // 左上角坐标
Point bottomRight = faces[i].br(); // 右下角坐标
cout << "脸—> " << i + 1 << ": 顶部坐标 (" << topLeft.x << ", " << topLeft.y << ")"
<< " - 底部坐标 (" << bottomRight.x << ", " << bottomRight.y << ")" << endl;
cout << "-------------------------------------------------" << endl;
}
imshow("Image", img); // 显示处理后的图像
waitKey(1); // 等待1毫秒,刷新显示窗口,确保视频连续播放
}
return 0; // 结束程序
}
5、演示一下图片脸部检测
二、总结
没有总结,玩得开心
标签:casca,人脸识别,opencv,检测,30,Opencv,人脸,faces,include From: https://blog.csdn.net/m0_73570600/article/details/143607862