• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

怎么通过OPENMV来识别物体的颜色

河套书苑 2020-03-06 浏览量:4945
怎么通过OPENMV来识别物体的颜色
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 不同颜色有对应的光谱主要分布,不同的对应分布阀值区间段对应不同的颜色,这样就对应识别啦。

    或者说经过摄像头采集的图形中,对应一个区域的颜色(物体颜色),其各自RGB分量的数值分布不同,就对应了不同的颜色,通过设置分别的阀值,就可以识别出颜色来。


    比如 OpenMV Cam 的python语言库中 具体的主要相关函数为image.find_blobs,其说明如下

    image.find_blobs(thresholds[ invert=False[ roi[ x_stride=2[ y_stride=1[ area_threshold=10[ pixels_threshold=10[ merge=False[ margin=0[ threshold_cb=None[ merge_cb=None]]]]]]]]]])

    查找图像中所有色块,并返回一个包括每个色块的色块对象的列表。请观察 image.blob 对象以获取更多信息。

    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以防止色块合并。

    不支持压缩图像和bayer图像。

    • 发布于 2020-03-07
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:0

相关问题

问题达人换一批

怎么通过OPENMV来识别物体的颜色