有没有会Qt+Opencv人脸识别的兄弟 求帮忙改代码!有偿 越快越好
1条回答 默认 最新
关注
- 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/275399
- 这篇博客你也可以参考下:基于Qt、opencv的规则工件尺寸识别
- 除此之外, 这篇博客: Qt 使用摄像头通过openCV进行人脸识别中的 人脸识别 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
有了它就可以开始进行识别了,也就不再新建工程了,其它代码和上一小节的工程中代码一致,只是修改了<kbd>readFarme()</kbd>方法如下,里面有些路径需要修改成自己电脑中文件所在路径:
//读取摄像头信息 void MainWindow::readFarme() { capture>>cap; //读取当前帧 if (!cap.empty()) //判断当前帧是否捕捉成功 **这步很重要 { cvtColor(cap, cap_gray, CV_BGR2GRAY); //转为灰度图 equalizeHist(cap_gray, cap_gray); //直方图均衡化,增加对比度方便处理 if (!face_cascade.load("D:\\openCV3_2\\opencv-3.2.0\\data\\haarcascades\\haarcascade_frontalface_alt.xml")) { qDebug("Load haarcascade_frontalface_alt failed!"); return; } Ptr<FaceRecognizer> modelPCA = createEigenFaceRecognizer(); modelPCA->load("E:\\workspace\\Qt_workspace\\build-face-Desktop_Qt_5_11_1_MinGW_32bit-Debug\\MyFacePCAModel.xml");//加载分类器 if (!eye_Classifier.load("D:\\openCV3_2\\opencv-3.2.0\\data\\haarcascades\\haarcascade_eye.xml")) //需要将xml文档放在自己指定的路径下 { qDebug("Load haarcascade_eye.xml failed!"); return; } //检测关于脸部位置 face_cascade.detectMultiScale(cap_gray, faceRect, 1.1, 3, 0 | CV_HAAR_DO_ROUGH_SEARCH, Size(50, 50));//检测 for (size_t i = 0; i < faceRect.size(); i++) { rectangle(cap, faceRect[i], Scalar(0, 255, 0)); //用绿色矩形画出检测到的位置 Mat faceROI = cap_gray(faceRect[i]); int predictPCA = 0; Mat face_test; Point text_lb; // 不加前面的cv::的话resize()方法会和MainWindow中的resize()冲突。 cv::resize(faceROI,face_test,Size(92, 112)); imshow("frame", face_test); //测试图像应该是灰度图 predictPCA = modelPCA->predict(face_test); qDebug("%d",predictPCA); if(predictPCA==3) // 这个3也就是上面labels.push_back(3);和图片是一一对应的 { string name = "xufan"; // 文本提示 text_lb = Point(faceRect[i].x, faceRect[i].y); putText(cap, name, text_lb, FONT_HERSHEY_COMPLEX, 1, Scalar(0, 0, 255)); } //imshow("frame", faceROI); //检测关于眼睛部位位置 int eye_num=0; eye_Classifier.detectMultiScale(faceROI, eyeRect, 1.1, 1, 0 | CV_HAAR_DO_ROUGH_SEARCH, Size(30, 30));//检测 for (size_t j = 0; j < eyeRect.size(); j++) { Rect rect(faceRect[i].x + eyeRect[j].x, faceRect[i].y + eyeRect[j].y, eyeRect[j].width, eyeRect[j].height); rectangle(cap, rect, Scalar(255, 0, 0)); //用蓝色矩形画出检测到的位置 eye_num++; if(eye_num==2) break; } } imag = Mat2QImage(cap); // 将Mat转换成QImage对象来显示 imag = imag.scaled(ui->camera->width(), ui->camera->height(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation);//设置图片大小和label的长宽一致 ui->camera->setPixmap(QPixmap::fromImage(imag)); // 将图片显示到label上 } else qDebug("can not "); }
运行过后就会出现就可以识别到视频中的人脸:
- 您还可以看一下 禾路老师的基于QT和OpenCV实现Linux平台下图像处理课程中的 课程总览和内容划分小节, 巩固相关知识点
- 以下回答由chatgpt基于相关博客总结生成:
在这里无法提供直接的代码帮助,但是可以给出解决问题的步骤:
-
确定问题出在哪里: 对于人脸识别的问题,首先需要看一下代码中是否涉及OpenCV相关的函数,然后确定问题的出现位置和错误信息。
-
检查环境变量: OpenCV在安装过程中需要添加环境变量,如果这个过程没有完成或者有误,可能会影响程序的正常运行。可以按照参考资料中的步骤检查环境变量是否设置正确。
-
检查库文件的链接: 人脸识别需要使用到一些相关的库文件,需要在Qt的项目中进行链接。检查一下项目中是否链接了OpenCV的库文件,并且链接方式是否正确。
-
检查代码: 如果以上两个步骤都没有问题,那么就需要检查代码本身。具体的问题视情况而定,可能是代码逻辑有误、函数参数传递有误等等。
-
调试和打印信息: 在解决问题的过程中,可以加入一些调试信息和打印语句,帮助定位问题。可以使用Qt的调试工具和输出语句。
总之,解决问题需要耐心和细心。根据实际情况逐步排查,找到问题所在,再进行调整和修改。
-
解决 无用评论 打赏 举报