iOS 上的 OpenCV 对象检测 (HOGDescriptor)

Posted

技术标签:

【中文标题】iOS 上的 OpenCV 对象检测 (HOGDescriptor)【英文标题】:OpenCV Object Detection (HOGDescriptor) on iOS 【发布时间】:2016-09-12 15:03:33 【问题描述】:

我正在尝试让 OpenCV 库提供的人员检测器运行。到目前为止,我在我的 iPhone 6 上获得了不错的性能,但检测非常糟糕,几乎永远不会正确,我不确定为什么会这样,因为您可以使用相同的默认 HOG 描述符找到示例视频,并且检测效果更好。

代码如下:

- (void)processImage:(Mat&)image 
    cv::Mat cvImg, result;
    cvtColor(image, cvImg, COLOR_BGR2HSV);

    cv::vector<cv::Rect> found, found_filtered;

    hog.detectMultiScale(cvImg, found, 0, cv::Size(4,4), cv::Size(8,8), 1.5, 0);

    size_t i;
    for (i=0; i < found.size(); i++) 
        cv::Rect r = found[i];
        rectangle(image, r.tl(), r.br(), Scalar(0,255,0), 2);
    

视频输入来自 iPhone 相机本身,每帧都会调用“processImage:”。对于 HOGDescriptor,我使用默认的人员检测器:

_hog.setSVMDetector(cv::HOGDescriptor::getDefaultPeopleDetector());

感谢您的帮助。 :)

【问题讨论】:

删除cvtColor(image, cvImg, COLOR_BGR2HSV);这一行,然后重试。 自然hog.detectMultiScale(image... 我之前试过,然后我得到这个错误:OpenCV Error: Assertion failed (img.type() == CV_8U || img.type() == CV_8UC3) in computeGradient 【参考方案1】:

我是 openCV 的新手,所以对此持保留态度: 行 cvtColor(image, cvImg, COLOR_BGR2HSV);将图像从 BGR 颜色空间转换为 HSV 颜色空间。从本质上讲,它将每个像素从由它拥有多少蓝色、绿色和红色表示,到由色调(颜色)、饱和度(多少颜色)和值(亮度)表示。显然,hogDescriptor 作用于 BGR 图像,而不是 HSV 图像。您需要向它传递一个 CV_8UC3 类型的图像:每像素 3 个通道 (C3) 的图像,例如。 BGR,以及每个通道(8U)一个8bit无符号数,这部分不太重要。你在方法 processImage() 中传递了什么?它应该是其中一种类型。如果不是,则需要知道类型并使用 cvtColor() 方法将其转换为 CV_8UC3

【讨论】:

以上是关于iOS 上的 OpenCV 对象检测 (HOGDescriptor)的主要内容,如果未能解决你的问题,请参考以下文章

Opencv中对象检测的重叠

OpenCV 对象检测 - 中心点

如何在 OpenCV 中使用计算机视觉检测飞镖板上的飞镖? [关闭]

如何计算模板匹配检测到的对象数量?

OpenCV:Canny 边缘检测器获取 minEnclosureCircle

运动目标检测——光流法与opencv代码实现