c++ - iOS 上的 OpenCV 对象检测 (HOGDescriptor)

标签 c++ ios iphone opencv object

我正在尝试让 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());

我很感激任何帮助。 :)

最佳答案

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

关于c++ - iOS 上的 OpenCV 对象检测 (HOGDescriptor),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39453385/

相关文章:

c++ - std::unique_ptr 在虚拟析构函数上重置 SIGABRT

ios - 如何防止用户点击 Popover 之外的其他 UIView(UIBarButtonItem)?

ios - 如何在 UNNotificationRequest 中设置重复间隔和触发日期

ios - 如何解决关于 UID 1 符号中 N_SO 的 LLDB 错误

c++ - 获得对私有(private)成员的访问权限以在 C++ 中进行测试

c++ - 测试 "Try and Catch"

c++ - 是否可以使用 C++ 应用程序中的 api 从 Deezer 流式传输全长音轨?

应用程序委托(delegate)中的 iOS 弹出消息?

ios - Carthage: 没有适用于 iOS 平台的共享框架方案(针对我自己的框架)

ios - 使用 Swift 3 将图像上传到解析服务器失败 : "JSON text did not start with array or object"