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 中使用计算机视觉检测飞镖板上的飞镖? [关闭]