QT+OPENCV——打开摄像头完整工程,HOG+SVM行人检测算法


简单的QImage工程

通常,QImage 类用于加载图像文件,并操作图像数据。在屏幕上进行显示时,需要先将 QImage 对象转成 QPixmap 对象。
相关的完整工程在这边: QT 自主选择路径,并加载出图片. (没有设置积分要求哦)

OpenCV打开摄像头 Qt工程

理论基础

信号与槽机制

完整工程

相关的完整工程在这边: QT + OpenCV 打开摄像头. (没有设置积分要求哦)

OpenCV行人检测 Qt工程

理论基础

行人检测算法使用的是HOG算子特征提取+SVM分类器训练,相关的原理阐述和参数分析参考如下:
HOG特征.
HOG特征与行人检测.
行人检测任务之HOG算子.
HOG detectMultiScale 参数分析.

行人检测 图像

void MainWindow::imgPedestrianDetect()
{
    // 显示原始图像
    imgInput = cv::imread("Pedestrian.png");
    cv::cvtColor(imgInput, imgInput, cv::COLOR_BGR2RGB);
    QImage imageInput = QImage((uchar*)(imgInput.data),imgInput.cols,imgInput.rows,imgInput.step,QImage::Format_RGB888);
    ui -> imgInputLabel ->setPixmap(QPixmap::fromImage(imageInput));

    // HOG 行人检测
    hog = cv::HOGDescriptor();
    hog.setSVMDetector(cv::HOGDescriptor::getDefaultPeopleDetector());
    std::vector<cv::Rect> pedestrian;
    cv::Size winStride = cv::Size(4, 4);
    cv::Size padding = cv::Size(8, 8);
    hog.detectMultiScale(imgInput, pedestrian, 0, winStride, padding, 1.25);

    // 框出检测目标
    for(std::vector<cv::Rect>::const_iterator r = pedestrian.begin(); r != pedestrian.end(); r++)
    {
        cv::Rect rect(0, 0, 0, 0);

        rect.x = int(r->x);
        rect.y = int(r->y);
        rect.width = int(r->width - 1);
        rect.height = int(r->height - 1);

        cv::rectangle(imgInput, rect, cv::Scalar(0, 255, 0), 3);
    }

    // 显示输出图像
    QImage imageOutput = QImage((uchar*)(imgInput.data),imgInput.cols,imgInput.rows,imgInput.step,QImage::Format_RGB888);
    ui -> imgOutputLabel ->setPixmap(QPixmap::fromImage(imageOutput));
}

行人检测 视频

void MainWindow::videoPedestrianDetect()
{
    double time_Start = (double)clock();

    CvCapture->read(imgInput);

    // 显示原始图像
    cv::cvtColor(imgInput, imgInput, cv::COLOR_BGR2RGB);
    QImage imageInput = QImage((uchar*)(imgInput.data),imgInput.cols,imgInput.rows,imgInput.step,QImage::Format_RGB888);
    ui -> imgInputLabel ->setPixmap(QPixmap::fromImage(imageInput));

    // HOG 行人检测
    hog = cv::HOGDescriptor();
    hog.setSVMDetector(cv::HOGDescriptor::getDefaultPeopleDetector());
    std::vector<cv::Rect> pedestrian;
    cv::Size winStride = cv::Size(4, 4);
    cv::Size padding = cv::Size(8, 8);
    hog.detectMultiScale(imgInput, pedestrian, 0, winStride, padding, 1.25);

    // 框出检测目标
    for(std::vector<cv::Rect>::const_iterator r = pedestrian.begin(); r != pedestrian.end(); r++)
    {
        cv::Rect rect(0, 0, 0, 0);

        rect.x = int(r->x);
        rect.y = int(r->y);
        rect.width = int(r->width - 1);
        rect.height = int(r->height - 1);

        cv::rectangle(imgInput, rect, cv::Scalar(0, 255, 0), 3);
    }

    // 显示输出图像
    QImage imageOutput = QImage((uchar*)(imgInput.data),imgInput.cols,imgInput.rows,imgInput.step,QImage::Format_RGB888);
    ui -> imgOutputLabel ->setPixmap(QPixmap::fromImage(imageOutput));

    double time_End = (double)clock();
    qDebug()<<"程序耗时:"<<(time_End - time_Start)<<"ms";//输出计时
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值