这段代码哪里错了,很奇怪的BUG,快哭了,为啥特征向量会这么大另外用vs时有那些高级调试技巧呢
是不是不小心开了release模式
■网友
没毛病,自己去看hog特征的计算方式,就知道这没毛病!!!一般用hog做图像处理时,会使用PCA降维!!!05年法国人发明的特征,用来做行人检测,但对于搔首弄姿的行人检测效果不佳,现在多用ASM
■网友
https://github.com/opencv/opencv/blob/05b15943d6a42c99e5f921b7dbaa8323f3c042c6/modules/objdetect/src/hog.cpp#L1616
很久没用opencv了,手头也没库,但这一行指明了descriptors 的大小为 getDescriptorSize() * cache.windowsInImage(paddedImgSize, winStride).area() .你可以试着打印一下这两项的值,看看是不是4906440
■网友
特征提取没毛病整张图像输进去,HOG特征维度太高,一般是搞个小点的检测窗提取HOG特征
■网友
不知道hog是做什么的,但是为什么vector的size()和i比较,i会变负的了?应该是overflow了。
如果你是在64位下,不要用int,试着用64位的int,比如long,int64_t.或者用sizeof检查长度。
■网友
看评论里题主想得到3780维的特征?那你得把图片resize到64*128啊
■网友
Hog会将整幅图片分成若干个二维区块m*n,区块的个数是整幅图像的大小除以每个区块的大小。如果每个区块里,对八个方向做梯度的histogram,那么就会生成8*m*n维的向量。看你的情况感觉是给入的图片太大了,导致m,n都非常大,如果在栈上分配,就肯定爆栈,如果在堆上,m,n足够大,就会导致内存不足了。
■网友
题主你好,最近我也在用opencv,遇到过一些问题。我怀疑可能是因为你将STL的vector传参进入dll导致的。 vector在exe和dll之间传递的时候,由于在dll内可能对vector插入数据,而这段内存是在dll里面分配的,exe无法知道如何释放内存,从而导致问题。
你可以试试一下三种方法:
1. 传递vector指针;
2. 传递const vector;( 改成const类型后,编译器便知道dll里不会改变vector,从而不会出错。 )
3. 尽量不使用stl作为dll间的传递参数,使用指针会更好一点;
另外,我用QtCreator MinGW Opencv调试相同代码则不会出现这个问题。不知道题主遇到的是不是这个问题,这里有个参考:
http://support.microsoft.com/default.aspx?scid=KB;en-us;q172396
http://support.microsoft.com/default.aspx?scid=KB;en-us;q168958
【这段代码哪里错了,很奇怪的BUG,快哭了,为啥特征向量会这么大另外用vs时有那些高级调试技巧呢】 DLL中传递STL参数,vector对象作为dll参数传递等问题 - 乐吾天 - 博客频道 - CSDN.NET
■网友
明天去看看,要不楼主贴个图呗
推荐阅读
- 垃圾■垃圾分类哪里强?南京全市成绩单亮相!
- 银行高管的薪酬结构图表最新的,请问在哪里可以收集
- 坐标合肥,请问在哪里能捕捉到程序员这种生物他们大都出现在哪里呢
- 想做手机网游代充,请问要去哪里找货源
- 汽车|滴滴的新欢PK旧爱:D1对比e5强在哪里
- 未来电子商务的爆发点在哪里
- 怎样对别人的代码进行适当修改使他永远也找不到问题出在哪
- 车解读|自诩是王者实则是青铜,法拉利的同门Giulia,输在了哪里?
- 求大神帮我破解这段数字密码794497,2937959529,9999728,4392
- 异乡好居说程序员删除代码是未经证实的传言吗