这是我的第一篇博客,我本人是正在读大三的小菜鸡,最近想开始学习一下TLD算法,于是乎在CSDN上找到了一位大牛在VS2015和OPENCV3的环境下编译TLD的博客,连接如下:
https://blog.csdn.net/youshaoduo/article/details/78411283
大牛的方法是没有问题的,但作为小白的我一开始搭建的时候遇到了一个问题。在用鼠标拉选目标框的时候出现了如下异常。
OpenCV Error: Assertion failed (dsize.area() > 0 || (inv_scale_x > 0 && inv_scale_y > 0)) in cv::resize, file C:\builds\master_PackSlave-win64-vc12-shared\opencv\modules\imgproc\src\imgwarp.cpp, line 3230
开始分析的时候我注意到box hull的数值为2的31次方-1,其中中断的地方指向resize函数。
resize函数大家都很熟悉了,img传入图像源是没有问题的,问题就出在Size中的patch_size,patch_size是parameters.yml文件传入的参数。当然当时的我还没意识到这个问题,在按parameters中的参数赋值为常数后。bbhull的值仍然是2的31次方-1,查明定义后发现其参数x1和y1的值初始化为INMAX,重载运算的for循环并没有执行,原因是goodbox_size()为空。
于是乎我意识到很有可能是初始化时外部的parameters.yml的参数没有传进来。在使用bat运行release文件夹中的exe,调用视频流的文件是可以执行的(在其他大牛调好的例程下实现的)。
经过检查发现,我在把文件放置在solution中的过程中,把parameters一同放在默认的工程路径外的一个文件夹了。利用ParadiseDuo文章中提到的调用fs.open函数,默认路径指向的是下图我标箭头的地方。
然后就可以编译了。
因为我在解决问题的过程中发现还是有挺多像我一样的萌新遇到了同样的问题,所以发个帖子出来给大家提供一下我解决的过程。写的不好的地方见笑了。