OpenCV 的 createsamples 工具在将 info 文件转换为 vec 文件时无法使用所有样本
OpenCV's createsamples tool fails to use all samples when converting info file to vec file
我使用 opencv_annotation
工具创建了一个信息文本文件,其中包含大约 300 张图像,其中一些包含多个 ROI(感兴趣区域)。以下是文件的示例输出,点表示格式相同的多行:
positives5.png 1 9 10 17 14
...
positives[=10=]3.png 2 14 2 5 7 11 18 8 9
...
positives5.png 3 21 9 7 9 13 10 9 11 7 15 6 7
然而,opencv_annotation
然后崩溃,出现错误 assertion failed (ssize.area() > 0) ...
,并且信息文本文件中的 ROI 中只有一小部分(~600 中的~200)被放入 vec 文件中,通过 opencv_traincascade
在尝试使用 vec 文件时使用参数 -numPos 500
时如何报告样本不足来验证。
为什么会出现这种情况,我该如何解决?
原因是创建示例时未正确定义 ROI。
在我的具体情况下,找到了这一行:
positives[=10=]5.png 2 9 6 6 7 0 0 0 0
回想一下这些文件的格式:
[filename] [# of objects] [[x y width height] [... 2nd object] ...]
在我的例子中,指定区域的宽度和长度均为 0 像素,这导致 opencv_createsamples
因错误而崩溃。只需删除对象数据并将 [# of objects]
递减 1 即可解决此问题,如下所示:
positives[=12=]5.png 1 9 6 6 7
此外,还应注意超出范围的值,例如:
positives[=13=]5.png 2 9 6 6 7 -5 0 3 2
positives[=13=]5.png 2 9 6 6 7 30 30 200 300
positives[=13=]5.png 2 9 6 6 7 35 35 3 5
在第一个例子中,没有一点应该是负数。在第二个示例中,我们的 .png
文件只有 32 x 32 像素大,因此 ROI 不能分别具有 200 和 300 的 width
和 height
。最后,在最后一个示例中,x
和 y
位置超出了我们的图像范围。
我使用 opencv_annotation
工具创建了一个信息文本文件,其中包含大约 300 张图像,其中一些包含多个 ROI(感兴趣区域)。以下是文件的示例输出,点表示格式相同的多行:
positives5.png 1 9 10 17 14
...
positives[=10=]3.png 2 14 2 5 7 11 18 8 9
...
positives5.png 3 21 9 7 9 13 10 9 11 7 15 6 7
然而,opencv_annotation
然后崩溃,出现错误 assertion failed (ssize.area() > 0) ...
,并且信息文本文件中的 ROI 中只有一小部分(~600 中的~200)被放入 vec 文件中,通过 opencv_traincascade
在尝试使用 vec 文件时使用参数 -numPos 500
时如何报告样本不足来验证。
为什么会出现这种情况,我该如何解决?
原因是创建示例时未正确定义 ROI。 在我的具体情况下,找到了这一行:
positives[=10=]5.png 2 9 6 6 7 0 0 0 0
回想一下这些文件的格式:
[filename] [# of objects] [[x y width height] [... 2nd object] ...]
在我的例子中,指定区域的宽度和长度均为 0 像素,这导致 opencv_createsamples
因错误而崩溃。只需删除对象数据并将 [# of objects]
递减 1 即可解决此问题,如下所示:
positives[=12=]5.png 1 9 6 6 7
此外,还应注意超出范围的值,例如:
positives[=13=]5.png 2 9 6 6 7 -5 0 3 2
positives[=13=]5.png 2 9 6 6 7 30 30 200 300
positives[=13=]5.png 2 9 6 6 7 35 35 3 5
在第一个例子中,没有一点应该是负数。在第二个示例中,我们的 .png
文件只有 32 x 32 像素大,因此 ROI 不能分别具有 200 和 300 的 width
和 height
。最后,在最后一个示例中,x
和 y
位置超出了我们的图像范围。