在HOG+SVM图片训练时,经常会看到一种报错信息:
OpenCV Error: Assertion failed (checkDetectorSize()) in cv::HOGDescriptor::setSVMDetector, file C:\builds\master_PackSlave-win64-vc12-shared\opencv\modules\objdetect\src\hog.cpp……
如:
其实这种错误是源自目标检测大小设置的不对,很多同学一开始训练HOG的时候没有注意HOG检测框是有大小设置的,这点和haar特征值训练不同。
如果大家去看下HOGDescriptor类在opencv中的源码,可以看出它是有默认值的,
默认构造函数的几个参数:
winSize : 窗口的大小
blockSize :块的大小
cellSize: 胞元的大小
nbins: 方向bin的个数
如果你训练时的目标大小是32x32的大小,而检测时变成了64x64或者干脆没有设置用默认的64x128,则会出现上述错误。只要在初始化HOGDescriptor的时候设置的没错问题就可解决,即将HOGDescriptor myHOG改为HOGDescriptor myHOG(Size(32, 32), Size(16, 16), Size(8, 8), Size(8, 8), 9)
顺便对于此处源码的解释贴两个还不错的博客:
https://blog.csdn.net/qq_26898461/article/details/46786285
https://www.cnblogs.com/lyx2018/p/7123794.html