2

サイズ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);

}

誰かが私に解決策を教えてもらえますか?

4

2 に答える 2

4

画像の片側が記述子よりも小さいため、計算は失敗します。

次の行を使用すると、計算が機能します。

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

ブロックのサイズは83 * 8 = 24 <= 25です 4 * 8 = 32 > 25

解決策は、正確に何を達成したいか、そしてどの妥協をしたいかによって異なります。小さい記述子を使用すると、他の画像の記述性がいくらか失われる可能性があります。または、小さすぎる画像を拡大縮小またはパディングすることもできます。これにより、記述子の有用性は低下しますが、他の画像には影響しません。

于 2013-01-14T09:43:51.733 に答える
2

同じ問題に遭遇し、画像のサイズを (64 x 128) 以上に変更して解決しました。これより小さいサイズはエラーを返します。だからあなたはするべきです

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

電話する前にhog.compute(....)

于 2013-03-27T17:13:26.717 に答える