OpenMV色块寻找

OpenMV入门,从入门到入坟>_<

此文章大部分内容取自OpenMV官方中文参考文档

详情看OpenMV官方中文参考文档

一、sensor.snapshot()拍一张照片

img = sensor.snapshot()

拍摄一张照片,snapshot()函数返回一个image对象

二、image.find_blogs()查找色块

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])
  • thresholds是一个列表对象,里面有许多数值范围的定义;
  • roi:为感兴趣区域,即图像操作范围;
  • x_stride:是查找某色块时需要跳过的x像素大小的色块,如果查找的色块较大时,x_stride可以适度增加,减小误差并提高色块查找速度,y_stride同理;
  • pixels_threshold:像素个数的阈值,如果像素数量低于这个值就会被过滤掉;
  • area_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以防止色块合并。

三、image.find_lines()查找直线

image.find_lines(roi,x_stride=2,y_stride=1,threshold=1000,theta_margin=25,rho_margin=25)
  • roi:为感兴趣区域,即图像操作范围;
  • x_stride:是查找某直线时需要跳过的x像素大小的直线,如果查找的直线较大时,x_stride可以适度增加,减小误差并提高直线查找速度,y_stride同理;
  • threshold:控制图像中的直线,若只返回大于或等于阈值为threshold的直线。应用程序的正确的 threshold 值取决于图像。注意:一条直线的模(magnitude)是组成直线所有sobel滤波像素大小的总和;
  • theta_margin 控制所监测的直线的合并。直线角度为 theta_margin 的部分和直线p值为 rho_margin 的部分合并;
  • rho_margin 控制所监测的直线的合并。 直线角度为 theta_margin 的部分和直线p值为 rho_margin的部分合并;

四、image.find_line_segments()查找线段

image.find_line_segments(roi, merge_distance=0,max_theta_difference=15)
  • roi:为感兴趣区域,即图像操作范围;
  • merge_distance 指定两条线段之间的可以相互分开而不被合并的最大像素数;
  • max_theta_difference 是上面merge_distancede 要合并的的两个线段的最大角度差值;

五、image.find_circles()查找圆形

image.find_circles(roi,x_stride=2,y_stride=1,threshold=2000,x_margin=10,y_margin=10,r_margin=10,r_min=2,r_max,r_step=2)
  • roi 是一个用以复制的矩形的感兴趣区域(x, y, w, h)。如果未指定, ROI 即图像矩形。操作范围仅限于roi区域内的像素;
  • threshold:通过控制像素点阈值来过滤掉比这个值小的圆;
  • x_stride:是查找圆形时需要跳过的x像素大小的圆形,如果查找的圆形较大时,x_stride可以适度增加,减小误差并提高圆形的查找速度,y_stride同理;
  • x_margin 控制所检测的圆的合并。 圆像素为 x_margin 、 y_margin 和 r_margin 的部分合并;y_margin 控制所检测的圆的合并。 圆像素为 x_margin 、 y_margin 和 r_margin 的部分合并;r_margin 控制所检测的圆的合并。 圆像素为 x_margin 、 y_margin 和 r_margin 的部分合并;
  • r_min 控制检测到的最小圆半径。增加此值可以加速算法; r_max控制检测到的最大圆半径。减少此值可以加快算法;
  • r_step 控制如何逐步检测半径;

六、image.find_rects()查找矩形

 image.find_rects(roi=Auto, threshold=10000)

返回一个 image.rect 对象的列表。
roi和threshold同上。

猜你喜欢

转载自blog.csdn.net/Mr__Jiangxiaobai/article/details/115438756
今日推荐