用C++使用opencv4.7.0生成一个能框出图片中多个人的人体轮廓的程序
时间: 2023-05-25 22:03:21 浏览: 100
使用 C++ 和 OpenCV 部署 YOLOv11 旋转框目标检测(包含详细的完整的程序和数据)
由于人体轮廓的识别需要利用机器学习算法,比较复杂,因此这里提供一个基于OpenCV官方提供的HOGDescriptor算法的人脸检测程序示例。
代码如下:
```c
#include <opencv2/opencv.hpp>
using namespace cv;
int main(int argc, char** argv)
{
// 加载分类器
CascadeClassifier face_cascade;
if (!face_cascade.load("haarcascade_frontalface_alt.xml")) {
printf("Error: Cannot load face cascade classifier!\n");
return -1;
}
// 加载图像
Mat image = imread("sample.jpg");
if (image.empty()) {
printf("Error: Cannot load image file!\n");
return -1;
}
// 转换为灰度图
Mat gray;
cvtColor(image, gray, CV_BGR2GRAY);
// 检测人脸
std::vector<Rect> faces;
face_cascade.detectMultiScale(gray, faces, 1.1, 2, 0, Size(30, 30));
// 在图像中画出人脸框
for (size_t i = 0; i < faces.size(); i++) {
rectangle(image, faces[i], Scalar(0, 0, 255), 2);
}
// 显示结果
namedWindow("Face Detection", WINDOW_AUTOSIZE);
imshow("Face Detection", image);
waitKey(0);
return 0;
}
```
该程序使用OpenCV中的CascadeClassifier类加载并调用haarcascade_frontalface_alt.xml分类器对输入的图像进行人脸检测,并在检测到人脸的位置绘制红色方框。
注:本示例中使用的是 OpenCV4.7.0 的 CascadeClassifier 类进行人脸检测,适用于较旧版本的 OpenCV,不适用于 4.9.0 及以上版本,如果需要进行人体轮廓检测,请参考 OpenCV 官方文档并根据需求选择相应的算法。
阅读全文