desolatewqwq 2023-04-26 18:53 采纳率: 14.3%
浏览 9

关于#Qt#的问题,如何解决?

有没有会Qt+Opencv人脸识别的兄弟 求帮忙改代码!有偿 越快越好

img

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-04-26 20:03
    关注
    • 帮你找了个相似的问题, 你可以看下: 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基于相关博客总结生成:

      在这里无法提供直接的代码帮助,但是可以给出解决问题的步骤:

      1. 确定问题出在哪里: 对于人脸识别的问题,首先需要看一下代码中是否涉及OpenCV相关的函数,然后确定问题的出现位置和错误信息。

      2. 检查环境变量: OpenCV在安装过程中需要添加环境变量,如果这个过程没有完成或者有误,可能会影响程序的正常运行。可以按照参考资料中的步骤检查环境变量是否设置正确。

      3. 检查库文件的链接: 人脸识别需要使用到一些相关的库文件,需要在Qt的项目中进行链接。检查一下项目中是否链接了OpenCV的库文件,并且链接方式是否正确。

      4. 检查代码: 如果以上两个步骤都没有问题,那么就需要检查代码本身。具体的问题视情况而定,可能是代码逻辑有误、函数参数传递有误等等。

      5. 调试和打印信息: 在解决问题的过程中,可以加入一些调试信息和打印语句,帮助定位问题。可以使用Qt的调试工具和输出语句。

      总之,解决问题需要耐心和细心。根据实际情况逐步排查,找到问题所在,再进行调整和修改。

    评论

报告相同问题?

问题事件

  • 创建了问题 4月26日

悬赏问题

  • ¥15 部分客户订单定位有误的问题
  • ¥15 如何在maya程序中利用python编写领子和褶裥的模型的方法
  • ¥15 Linux权限管理相关操作(求解答)
  • ¥15 Bug traq 数据包 大概什么价
  • ¥15 在anaconda上pytorch和paddle paddle下载报错
  • ¥25 自动填写QQ腾讯文档收集表
  • ¥15 DbVisualizer Pro 12.0.7 sql commander光标错位 显示位置与实际不符
  • ¥15 android 打包报错
  • ¥15 关于stm32的问题
  • ¥15 ncode振动疲劳分析中,noisefloor如何影响PSD函数?