1.image.find_blobs(thresholds, roi=Auto, x_stride=2, y_stride=1, invert=False, area_threshold=10, pixels_threshold=10, merge=False, margin=0, threshold_cb=None, merge_cb=None,x_hist_bins_max=0, y_hist_bins_max=0)
thresholds
必须是元组列表。 [(lo, hi), (lo, hi), ..., (lo, hi)]
定义你想追踪的颜色范围。 对于灰度图像,每个元组需要包含两个值 - 最小灰度值和最大灰度值。 仅考虑落在这些阈值之间的像素区域。 对于RGB565图像,每个元组需要有六个值(l_lo,l_hi,a_lo,a_hi,b_lo,b_hi) - 分别是LAB L,A和B通道的最小值和最大值。 为方便使用,此功能将自动修复交换的最小值和最大值。 此外,如果元组大于六个值,则忽略其余值。相反,如果元组太短,则假定其余阈值处于最大范围。
备注
获取所跟踪对象的阈值,只需在IDE帧缓冲区中选择(单击并拖动)跟踪对象。 直方图会相应地更新到所在区域。然后只需写下颜色分布在每个直方图通道中起始与下降位置。 这些将是 thresholds
的低值和高值。 由于上下四分位数据相差微小,故手动确定阈值为佳。
您还可以通过进入OpenMV IDE中的 工具 ->机器视觉 ->阈值编辑器
并从GUI窗口中拖动滑块来确定颜色阈值。
invert
反转阈值操作,像素在已知颜色范围之外进行匹配,而非在已知颜色范围内。
roi
是感兴趣区域的矩形元组(x,y,w,h)。如果未指定,ROI即整个图像的图像矩形。 操作范围仅限于 roi
区域内的像素。
x_stride
是查找某色块时需要跳过的x像素的数量。找到色块后,直线填充算法将精确像素。 若已知色块较大,可增加 x_stride
来提高查找色块的速度。
y_stride
是查找某色块时需要跳过的y像素的数量。找到色块后,直线填充算法将精确像素。 若已知色块较大,可增加 y_stride
来提高查找色块的速度。
若一个色块的边界框区域小于 area_threshold
,则会被过滤掉。
若一个色块的像素数小于 pixel_threshold
,则会被过滤掉。
merge
若为True,则合并所有没有被过滤掉的色块,这些色块的边界矩形互相交错重叠。 margin
可在相交测试中用来增大或减小色块边界矩形的大小。例如:边缘为1、相互间边界矩形为1的色块将被合并。
合并色块使颜色代码追踪得以实现。每个色块对象有一个代码值 code
,该值为一个位向量。 例如:若您在 image.find_blobs 中输入两个颜色阈值,则第一个阈值代码为1,第二个代码为2(第三个代码为4,第四个代码为8,以此类推)。 合并色块对所有的code使用逻辑或运算,以便您知道产生它们的颜色。这使得您可以追踪两个颜色,若您用两种颜色得到一个色块对象,则可能是一种颜色代码。
若您使用严格的颜色范围,无法完全追踪目标对象的所有像素,您可能需要合并色块。
最后,若您想要合并色块,但不想两种不同阈值颜色的色块被合并,只需分别两次调用 image.find_blobs
,不同阈值色块就不会被合并。
threshold_cb
可设置为用以调用阈值筛选后的每个色块的函数,以便将其从将要合并的色块列表中过滤出来。 回调函数将收到一个参数:要被筛选的色块对象。然后回调函数需返回True以保留色块或返回False以过滤色块。
merge_cb
可设置为用以调用两个即将合并的色块的函数,以禁止或准许合并。回调函数将收到两个参数—两个将被合并的色块对象。 回调函数须返回True以合并色块,或返回False以防止色块合并。
x_hist_bins_max
如果设置为非零值,则使用对象中所有列的 x_histogram 投影填充每个 blob 对象中的直方图缓冲区。 然后该值设置该投影的箱数。
y_hist_bins_max
如果设置为非零,则使用对象中所有行的 y_histogram 投影填充每个 blob 对象中的直方图缓冲区。 然后该值设置该投影的箱数。
不支持压缩图像和bayer图像。