OpenCV中DPM(Deformable Part Model)目标检测类cv::dpm::DPMDetector

发布于:2025-07-05 ⋅ 阅读:(20) ⋅ 点赞:(0)
  • 操作系统:ubuntu22.04
  • OpenCV版本:OpenCV4.9
  • IDE:Visual Studio Code
  • 编程语言:C++11

算法描述

OpenCV 中用于基于可变形部件模型(DPM) 的目标检测器,主要用于行人、人脸等目标的检测。它是一种传统的基于特征的目标检测方法,不依赖深度学习,而是使用 HOG 特征 + 部件模型来进行检测。

示例代码



#include <iostream>
#include <opencv2/dpm.hpp>
#include <opencv2/opencv.hpp>

using namespace cv;
using namespace cv::dpm;
using namespace std;

int main()
{
    // 指定模型文件路径(支持多个类别)
    vector< String > modelPaths = { "car.xml" };  // 可添加多个如 "car.xml"
    vector< String > classNames = { "car" };      // 类别名称
    
    // 创建 DPM 检测器
    Ptr< DPMDetector > detector = DPMDetector::create( modelPaths, classNames );
    if ( detector.empty() )
    {
        cerr << "Failed to create DPMDetector!" << endl;
        return -1;
    }

    // 读取图像
    Mat image = imread( "/media/dingxin/data/study/OpenCV/sources/images/cars.png" );

    if ( image.empty() )
    {
        cerr << "Failed to load image!" << endl;
        return -1;
    }
     imshow( "Original", image );

    // 执行检测
    vector< DPMDetector::ObjectDetection > detections;
    detector->detect( image, detections );

    // 显示检测结果
    for ( const auto& det : detections )
    {
        if(det.score > 1.0)
            rectangle( image, det.rect, Scalar( 0, 255, 0 ), 2 );
        cout << "Detected object with score: " << det.score << endl;
    }


   
    imshow( "Detections", image );
    waitKey();

    return 0;
}

运行结果

在这里插入图片描述

模型文件获取

你需要下载 .xml 格式的 DPM 模型文件才能运行检测。

官方支持的模型包括:

类别 文件名
行人 (Pedestrian)
轿车(Car) car.xml
自行车(Bicycle) bicycle.xml

你可以从 OpenCV 的额外测试数据仓库获取这些模型:

🔗 OpenCV Extra GitHub - dpm 测试数据


网站公告

今日签到

点亮在社区的每一天
去签到