我有一个项目,我想检测图像中的对象; 我的目标是使用HOG功能.通过使用OpenCV SVM实现,我可以找到用于检测人的代码,并且我阅读了一些关于调整参数以便检测对象而不是人的文章.不幸的是,由于一些原因我不能这样做; 首先,我可能错误地调整了参数,其次,我不是C++中的优秀程序员,但我必须使用C++/OpenCV ... 在这里你可以找到用于检测人的HOG功能的代码使用C++/OpenCV.
假设我想检测此图像中的对象.现在,我将向您展示我在代码中尝试更改的内容,但它与我无关.
我试图改变的代码:
HOGDescriptor hog;
hog.setSVMDetector(HOGDescriptor::getDefaultPeopleDetector());
Run Code Online (Sandbox Code Playgroud)
我尝试getDefaultPeopleDetector()使用以下参数进行更改,但它不起作用:
(Size(64, 128), Size(16, 16), Size(8, 8), Size(8, 8), 9, 0,-1, 0, 0.2, true, cv::HOGDescriptor::DEFAULT_NLEVELS)
Run Code Online (Sandbox Code Playgroud)
然后我尝试制作一个矢量,但是当我想打印结果时,它似乎是空的.
vector<float> detector;
HOGDescriptor hog(Size(64, 128), Size(16, 16), Size(8, 8), Size(8, 8), 9, 0,-1, 0, 0.2, true, cv::HOGDescriptor::DEFAULT_NLEVELS);
hog.setSVMDetector(detector);
Run Code Online (Sandbox Code Playgroud)
拜托,我需要帮助解决这个问题.
cv2.HOGDescriptor()我正在尝试使用默认的人员分类器从摄像机的源中检测人员。
识别器有点工作,但老实说,我在理解分别分配给winStride、padding和scale的值时遇到了问题groupThreshold。
目前,相机输入的帧大小为1280 X 720,我将其大小调整为400 X 400detectMultiScale ,然后使用参数执行
hogParams = {'winStride': (8, 8), 'padding': (32, 32), 'scale': 1.05, 'finalThreshold': 2}
Run Code Online (Sandbox Code Playgroud)
根据这个答案,我了解这些参数的作用和代表的含义。
我的问题是,有没有办法将图像大小与这些值映射?数学方程?一种估算方法?我不一定要求一种具体的方法,甚至一种给出所有值的方法,但比试错或幻数更好的方法。
大多数参考文献和教程几乎都使用幻数,但没有给出它们如何获得它们的建议。