iOS上的OpenCV对象检测(HOGDescriptor)

时间:2016-09-12 15:03:33

标签: c++ ios iphone opencv object

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

以下是代码:

- (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相机本身和&#34; processImage:&#34;为每一帧都要求。对于HOGDescriptor,我使用默认的人物检测器:

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

我感谢任何帮助。 :)

1 个答案:

答案 0 :(得分:2)

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