opencv-从25 * 125眼图中计算HOG特征时获取std :: length_error'what():vector :: _ M_fill_insert

时间:2013-01-14 09:00:08

标签: opencv

当我计算尺寸为25 * 125的眼睛图像的HOG特征时。抛出'std :: length_error'实例后调用错误消息终止   what():vector :: _ M_fill_insert

HOGDescriptor hog;
vector<float> ders;
vector<Point>locs;
hog.compute(img,ders,Size(4,4),Size(0,0),locs);
Mat Hogfeat;
Hogfeat.create(ders.size(),1,CV_32FC1);

for(int i=0;i<ders.size();i++)
{
Hogfeat.at<float>(i,0)=ders.at(i);

}

任何人都可以告诉我解决方案吗?

2 个答案:

答案 0 :(得分:4)

图像的一侧小于描述符,因此计算失败。

如果我使用以下行,则计算对我有用:

hog.compute(img,ders,Size(3,3),Size(0,0),locs);

块的大小为8.所以3 * 8 = 24 <= 25但是4 * 8 = 32 > 25

解决方案取决于您想要达到的目标以及您愿意做出的妥协。 您可以使用较小的描述符,这可能会导致其他图像的描述性丢失。或者你可以缩放或填充太小的图像,这可能会使它们的描述符不那么有用,但不会影响其他图像。

答案 1 :(得分:2)

我遇到了同样的问题,我通过将图像调整为(64 x 128)或更大来解决它;任何小于此的尺寸都将返回该错误。你应该这样做

resize(img, dst, Size(64, 128))¶

在致电hog.compute(....)

之前