我是OpenCV的新手,我想练习一个简单的人脸检测和图像裁剪。
具体来说,我使用cv::glob
从文件夹中加载图像,然后检测人脸,在检测到的人脸上绘制矩形,然后只裁剪检测到的人脸区域。
void faceDetectFolder()
{
Mat source;
CascadeClassifier face_cascade;
face_cascade.load("C:/OpenCV-3.2.0/opencv/sources/data/haarcascades/haarcascade_frontalface_alt2.xml");
String path(path on my PC);
std::vector<cv::String> fn;
glob(path, fn, true);
for (size_t i = 0; i < fn.size(); i++)
{
source = imread(fn[i]);
if (source.empty()) continue;
std::string imgname = fn[i].substr(45, std::string::npos); //File name
std::vector<Rect> faces;
face_cascade.detectMultiScale(source, faces, 1.1, 2, 0 | CV_HAAR_SCALE_IMAGE, Size(30, 30));
for (int i = 0; i < faces.size(); i++)
{
if (faces[i].width > 80 && faces[i].height*0.5 > 80) //Threshold, some detections are false
{
int x = faces[i].x;
int y = faces[i].y;
int h = y + faces[i].height;
int w = x + faces[i].width;
rectangle(source, Point(x, y), Point(w, h), Scalar(255, 0, 0), 2, 8, 0); //Drawing rectangle on detected face
imshow(imgname, source);
Rect roi;
roi.x = x;
roi.y = y;
roi.height = h;
roi.width = w;
Mat detectedface = source(roi);
imshow("cropped image", detectedface);
waitKey(0);
}
}
}
}
OpenCV错误:断言失败(0<=ROI.X&&0<=ROI.Width&&ROI.X+ROI.Width<=M.cols&&0<=ROI.Y&&0<=ROI.Height&&ROI.Y+ROI.Height<=M.rows),在CV::MAT中,文件C:\build\master_winpack-build-win64-vc14\OpenCV\modules\core\src\matrix.cpp,第522行
现在我明白了,出现错误是因为ROI
超出了范围。但让我烦恼的是。
>
当我一开始试图绘制矩形时,我不应该得到这个错误吗?为什么我在ROI
上得到错误,而不是在我绘制的矩形上?
为什么ROI
越界?我显示的图像与矩形画在它和一切看起来很好。为什么当ROI
与绘制的矩形具有相同的值时会出现此错误?
请原谅我的任何新秀错误,我们都是从某个地方开始的。谢谢你的阅读,祝你有一个愉快的一天!
在roi.height
和roi.width
中,尝试分别给出面[i].height
和面[i].width
。实际上,您可能会认为错误应该出现在前面,但在rect ROI
的情况下,它可以使用矩形作为参数,使用两个对角相反的顶点,而不是宽度/高度。您可以用点(x,y)
和点(w,h)
来初始化rect
,它应该可以正常工作。
主要内容:第1步:加载OpenCV本机库,第2步:实例化CascadeClassifier类,步骤3:检测脸部包的类包含使用系统摄像头捕获视频的类和方法。 让我们来看看它是如何做到这一点。 第1步:加载OpenCV本机库 在使用OpenCV库编写Java代码时,需要做的第一步是使用加载OpenCV本地库。加载OpenCV本机库,如下所示。 第2步:实例化CascadeClassifier类 包的类用于加载分类器文件。 通过传递xml文件来实例化这个类,如下所示。 步骤3:检测脸部 可以使用类的方
以下程序演示如何使用系统相机检测脸部并使用JavaFX窗口显示脸部。 参考以下示例代码 - 执行上面示例代码,得到以下结果 - 系统提示:头像太丑,无法显示…
本文向大家介绍OpenCV实现人脸检测功能,包括了OpenCV实现人脸检测功能的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了OpenCV实现人脸检测功能的具体代码,供大家参考,具体内容如下 1、HAAR级联检测 2、 DNN人脸检测 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。
1.接口描述 对照片中的人脸进行检测,返回人脸数目和每张人脸的位置信息 图片要求 格式为 JPG(JPEG),BMP,PNG,GIF,TIFF 宽和高大于 8px,小于等于4000px 小于等于 5 MB 请求方式: POST 请求URL: https://cloudapi.linkface.cn/face/face_detect 2.请求参数 字段 类型 必需 描述 api_id string
问题内容: 我正在尝试在android上进行人脸检测,并且正在遵循指南http://www.richardnichols.net/2011/01/java- facial-recognition-haar-cascade-with-jjil- guide/ 但是在android上。当我做 尽管确切的代码使用netbeans代码返回了2张面孔,但pushAndReturn似乎只从Android图像上
调用人脸检测接口,返回人脸检测的结果 requestsyntax image = Image(uri="fds://cnbj2.fds.api.xiaomi.com/vision-test/test_img.jpg") detect_faces_request = DetectFacesRequest(image) faces_list = vision_client.analysis_faces