将info文件转换为vec文件时,OpenCV的createsamples工具无法使用所有样本

时间:2016-06-02 18:27:57

标签: opencv opencv3.0

我使用opencv_annotation工具创建了一个信息文本文件,大约有300张图片,还有一些包含多个ROI(兴趣区域)。以下是文件的示例输出,其中的点表示许多具有相同格式的行:

positives\1\105.png 1 9 10 17 14
...
positives\2\003.png 2 14 2 5 7 11 18 8 9
...
positives\3\045.png 3 21 9 7 9 13 10 9 11 7 15 6 7

然而,opencv_annotation然后崩溃,错误assertion failed (ssize.area() > 0) ...,并且信息文本文件中只有一小部分(约600个~600)的ROI被放入vec文件中,经过验证在尝试使用vec文件时,opencv_traincascade在使用参数-numPos 500时报告样本不足的方式。

为什么会发生这种情况,我该如何解决?

1 个答案:

答案 0 :(得分:0)

原因是创建样本时未正确定义的ROI。 在我的具体案例中,找到了这条特定的行:

positives\2\005.png 2 9 6 6 7 0 0 0 0

回想一下这些文件的格式:

[filename] [# of objects] [[x y width height] [... 2nd object] ...]

在我的情况下,指定区域的宽度和长度为0像素,这会导致opencv_createsamples因非常错误而崩溃。简单地删除对象数据并逐个递减[# of objects]解决了这个问题,如下所示:

positives\2\005.png 1 9 6 6 7

此外,还应该注意超出范围的值,例如:

positives\2\005.png 2 9 6 6 7 -5 0 3 2
positives\2\005.png 2 9 6 6 7 30 30 200 300
positives\2\005.png 2 9 6 6 7 35 35 3 5

在第一个例子中,没有任何一点应该是否定的。在第二个示例中,我们的.png文件只有32 x 32像素大,因此ROI的widthheight分别不能为200和300。最后,在最后一个示例中,xy位置超出了我们的图像范围。