做网站多少钱西宁君博示范,wordpress有哪些工具栏,北京搜索引擎优化经理,北京网站建设哪家好寻找特定目标 这个功能主要应用在#xff0c;机器人寻找色块#xff0c;无人机跟踪特定颜色#xff0c;生产线上检测物体进行分类#xff0c;还有人机交互等等功能应用。
相关函数
image.find_blobs(thresholds, roiAuto, x_stride2, y_stride1, invertFalse, area_thr…寻找特定目标 这个功能主要应用在机器人寻找色块无人机跟踪特定颜色生产线上检测物体进行分类还有人机交互等等功能应用。
相关函数
image.find_blobs(thresholds, roiAuto, x_stride2, y_stride1, invertFalse, area_threshold10, pixels_threshold10, mergeFalse, margin0, threshold_cbNone, merge_cbNone) 这个函数在openmv中是用来查找颜色块的函数通过阈值检测图像中的颜色块完成之后返回列表列表中包含所有检测到的颜色块。
thresholds参数 这个参数用来确定检测什么颜色每个颜色阈值为一个元组使用LAB颜色表示颜色阈值范围L_min L_max A_min A_max B_min B_max要检测什么颜色就要填什么颜色的颜色阈值。
import sensorsensor.reset()
sensor.set_framesize(sensor.QVGA)
sensor.set_pixformat(sensor.RGB565)thresholds [(30,100,15,127,15,127)]while (True):image sensor.snapshot()red_blobs image.find_blobs(thresholds) 但是这个参数需要注意的是thresholds参数是一个列表list里面元素是需要检测颜色的元组组成的 如果没有定义对就会报错了。 上面的代码检测红色但是对返回列表没有什么操作也就视频上没有什么显示。
roi参数 这个参数用来设置感兴趣的区域或者说只检测的区域区域之外的颜色不检测roi [x ,y, w, h] 四个参数起始x y 检测区域宽度 w 检测区域高度 h 使用代码检测左半区的红色同时框选出来。
import sensor, image# 初始化摄像头
sensor.reset()
sensor.set_framesize(sensor.QVGA) # 设置帧大小为QVGA (320x240)
sensor.set_pixformat(sensor.RGB565) # 设置像素格式为RGB565
sensor.skip_frames(time2000) # 跳过一些帧使设置生效# 定义颜色阈值 (这里假设要检测红色区域)
thresholds [(30, 100, 15, 127, 15, 127)]# 定义左边ROI
left_roi [0, 0, 160, 240] # 定义图像左半部分的感兴趣区域while True:img sensor.snapshot() # 捕捉图像# 在左边ROI中寻找颜色块red_blobs img.find_blobs(thresholds, roileft_roi, pixels_threshold200, area_threshold200, mergeTrue)# 如果找到颜色块if red_blobs:for blob in red_blobs:# 绘制矩形和十字标记img.draw_rectangle(blob.rect(), color(255, 0, 0)) # 红色矩形img.draw_cross(blob.cx(), blob.cy(), color(255, 0, 0)) # 红色十字print(Red blob found at: (%d, %d) with area %d % (blob.cx(), blob.cy(), blob.area()))img.draw_rectangle(left_roi,color (255,0,0)) #将检测区域使用红色框选出来 上面的代码因为设置了roi所以值检测左半部分区域内的红色有半部分的红色不检测同时检测出红色使用十字和画框进行标出显示。
x_stride参数 这个参数用来设置在调用find_blobs函数指定水平方向上搜索颜色块的步长设置为1每个像素都检查设置为2每隔一个像素进行检查是检测颜色最小宽度的设置这个参数设置可以帮助减少处理时间通过跳过一些参数。 同时如果不配置默认为2。
y_stride参数 用来查找y方向上的最小宽度像素默认为1如果设置为8是检测颜色最小长度的设置如果设置为8就是只检测8个像素以上的需要检测的颜色。
invert 参数 这个参数用来翻转阈值检测颜色是thresholds如果加入这个参数会检测除设定检测颜色以外的所有颜色两个取值 True False 前者开启翻转。
area_threshold面积阈值 参数用来设置检测颜色的最小面积阈值出现检测颜色同时检测颜色超过这个阈值不会被过滤出去否则将会过滤出去。
pixels_threshold像素阈值 像素阈值参数同样的像素个数小于这个值会被过滤出去不会被检测。
merga参数 当检测颜色块重叠的时候会自动合并颜色块当设置为True的时候不论是检测多个颜色块还是单个颜色块当检测颜色被分为多个小块的时候merga这个参数可以合并为整体。 如果检测多个颜色且颜色在图像中出现重叠merga True 这个参数会将图像合并为一个颜色块无论这些颜色是否相同。
import sensor, image, time# 初始化摄像头
sensor.reset()
sensor.set_framesize(sensor.QVGA) # 设置帧大小为QVGA (320x240)
sensor.set_pixformat(sensor.RGB565) # 设置像素格式为RGB565
sensor.skip_frames(time2000) # 跳过一些帧使设置生效# 定义颜色阈值 (假设要检测红色和蓝色区域)
red_thresholds (30, 100, 15, 127, 15, 127)
blue_thresholds (0, 30, -128, 0, -128, 0)
thresholds [red_thresholds, blue_thresholds]# 创建一个时钟对象来跟踪帧率
clock time.clock()while True:clock.tick() # 跟踪FPSimg sensor.snapshot() # 捕捉图像# 在图像中寻找颜色块设置merge为Trueblobs img.find_blobs(thresholds, pixels_threshold200, area_threshold200, mergeTrue)# 如果找到颜色块if blobs:for blob in blobs:# 绘制矩形和十字标记img.draw_rectangle(blob.rect(), color(255, 0, 0)) # 红色矩形img.draw_cross(blob.cx(), blob.cy(), color(255, 0, 0)) # 红色十字print(Blob found at: (%d, %d) with area %d % (blob.cx(), blob.cy(), blob.area()))print(FPS: %f % clock.fps()) # 打印FPS检测红色和蓝色当红色和蓝色出现重叠的时候会自动合并为一起。 到此这个函数的多有参数详解就描述完了在调用函数的时候参数如果没有填写那么就会使用默认值进行调用最少参数只使用检测颜色的LAB值就可以完成调用。 #函数返回对象属性 前面有提到过find_blobs函数是有返回对象的这个返回对象是一个列表列表里面的成员变量是表示单个颜色块的对象 这些对象是有属性和函数也就是说列表里面的对象可以调用函数进行操作。 blob.rect() 返回这个色块的外框——矩形元组(x, y, w, h)可以直接在image.draw_rectangle中使用。 blob.x() 返回色块的外框的x坐标int也可以通过blob[0]来获取。blob.y() 返回色块的外框的y坐标int也可以通过blob[1]来获取。blob.w() 返回色块的外框的宽度wint也可以通过blob[2]来获取。blob.h() 返回色块的外框的高度hint也可以通过blob[3]来获取。 blob.pixels() 返回色块的像素数量int也可以通过blob[4]来获取。blob.cx() 返回色块的外框的中心x坐标int也可以通过blob[5]来获取。blob.cy() 返回色块的外框的中心y坐标int也可以通过blob[6]来获取。 blob.rotation() 返回色块的旋转角度单位为弧度float。如果色块类似一个铅笔那么这个值为0~180°。如果色块是一个圆那么这个值是无用的。如果色块完全没有对称性那么你会得到0~360°也可以通过blob[7]来获取。
blob.code() 返回一个16bit数字每一个bit会对应每一个阈值。
import sensor, image, time# 初始化摄像头
sensor.reset()
sensor.set_framesize(sensor.QVGA) # 设置帧大小为QVGA (320x240)
sensor.set_pixformat(sensor.RGB565) # 设置像素格式为RGB565
sensor.skip_frames(time2000) # 跳过一些帧使设置生效# 定义颜色阈值 (假设要检测红色区域)
thresholds [(30, 100, 15, 127, 15, 127)]# 创建一个时钟对象来跟踪帧率
clock time.clock()while True:clock.tick() # 跟踪FPSimg sensor.snapshot() # 捕捉图像# 在图像中寻找颜色块blobs img.find_blobs(thresholds, pixels_threshold200, area_threshold200, mergeTrue)# 如果找到颜色块if blobs:for blob in blobs:# 绘制矩形和十字标记img.draw_rectangle(blob.rect(), color(255, 0, 0)) # 红色矩形img.draw_cross(blob.cx(), blob.cy(), color(255, 0, 0)) # 红色十字# 输出颜色块的属性信息print(Blob found at:)print( Coordinates: (x%d, y%d) % (blob.cx(), blob.cy()))print( Area: %d % blob.area())print( Rectangle: (x%d, y%d, w%d, h%d) % blob.rect())print( Pixels: %d % blob.count())print( Density: %f % blob.density())print( Rotation: %f % blob.rotation())print( Major Axis Line: %s % str(blob.major_axis_line()))print( Minor Axis Line: %s % str(blob.minor_axis_line()))print( Compactness: %f % blob.compactness())print( Elongation: %f % blob.elongation())print(FPS: %f % clock.fps()) # 打印FPS欢迎指正希望对你有所帮助