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