我使用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
时报告样本不足的方式。
为什么会发生这种情况,我该如何解决?
答案 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的width
和height
分别不能为200和300。最后,在最后一个示例中,x
和y
位置超出了我们的图像范围。