testpic

博客内容为简单的测试信息,未包含更多关键信息技术内容。
test
cv::Point getFaceCenter(const cv::Mat& image) { std::vector<cv::Rect> faces; cv::Mat gray; qDebug() << "通道数:" << image.channels(); cv::cvtColor(image, gray, cv::COLOR_RGBA2GRAY); cv::equalizeHist(gray, gray); // 检测人脸 face_cascade.detectMultiScale(gray, faces, 1.1, 2, 0 | cv::CASCADE_SCALE_IMAGE, cv::Size(30, 30)); if (faces.empty()) { return cv::Point(-1, -1); } // 只使用第一个检测到的人脸 cv::Rect face = faces[0]; // 在人脸区域检测眼睛 cv::Mat faceROI = gray(face); std::vector<cv::Rect> eyes; eyes_cascade.detectMultiScale(faceROI, eyes, 1.1, 2, 0 | cv::CASCADE_SCALE_IMAGE, cv::Size(30, 30)); qDebug() << "眼睛个数:" << eyes.size(); if (eyes.size() < 2) { return cv::Point(face.x + face.width / 2, face.y + face.height / 2); } // 计算眼睛中心 cv::Point eye1(face.x + eyes[0].x + eyes[0].width / 2, face.y + eyes[0].y + eyes[0].height / 2); cv::Point eye2(face.x + eyes[1].x + eyes[1].width / 2, face.y + eyes[1].y + eyes[1].height / 2); // 使用红色绘制矩形边框(线宽为2像素) cv::Mat img1; image.copyTo(img1); for (auto eye : eyes) { cv::rectangle(img1, cv::Rect(eye.x + face.x, eye.y + face.y, eye.width, eye.height), cv::Scalar(0, 0, 255), 2); } //cv::rectangle(img1, cv::Rect(eyes[1].x + face.x, eyes[1].y + face.y, eyes[1].width, eyes[1].height), cv::Scalar(0, 0, 255), 2); cv::rectangle(img1, face, cv::Scalar(0, 255, 0), 2); cv::imwrite("C:\\Users\\wyqiu\\Pictures\\testPic\\img1.jpg",img1); // 返回眼睛中心的中点 return cv::Point((eye1.x + eye2.x) / 2, (eye1.y + eye2.y) / 2); } haarcascade_lefteye_2splits.xml和haarcascade_righteye_2splits.xml这两个文件有什么用,对上面的函数识别左右眼睛是否有帮助
最新发布
09-03
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值