思路应该就是给他一个区域,然后在区域里面找红色小球
拉到最后看结果,前面目前是死路……

那么找小球代码
官网:http://book.openmv.cc/quick-starter.html

import sensor, image, time
red_threshold=(18, 69, 40, 86, 0, 72)
sensor.reset() # 初始化摄像头
sensor.set_pixformat(sensor.RGB565) # 格式为 RGB565.
sensor.set_framesize(sensor.QQVGA) # 使用 QQVGA 速度快一些
sensor.skip_frames(time = 2000) # 跳过2000s,使新设置生效,并自动调节白平衡
sensor.set_auto_gain(False) # 关闭自动自动增益。默认开启的,在颜色识别中,一定要关闭白平衡。
sensor.set_auto_whitebal(False)
clock = time.clock() # 追踪帧率while(True):clock.tick() # Track elapsed milliseconds between snapshots().img = sensor.snapshot() # 从感光芯片获得一张图像blobs = img.find_blobs([red_threshold])if blobs:#如果找到了目标颜色for b in blobs:img.draw_rectangle(b[0:4]) # rectimg.draw_cross(b[5], b[6]) # cx, cyprint(b)

颜色和形状一起识别


import sensor, image, timesensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QQVGA)
sensor.skip_frames(time = 2000)
sensor.set_auto_gain(False) # must be turned off for color tracking
sensor.set_auto_whitebal(False) # must be turned off for color tracking
clock = time.clock()while(True):clock.tick()img = sensor.snapshot().lens_corr(1.8)for c in img.find_circles(threshold = 3500, x_margin = 10, y_margin = 10, r_margin = 10,r_min = 2, r_max = 100, r_step = 2):area = (c.x()-c.r(), c.y()-c.r(), 2*c.r(), 2*c.r())#area为识别到的圆的区域,即圆的外接矩形框statistics = img.get_statistics(roi=area)#像素颜色统计print(statistics)#(0,100,0,120,0,120)是红色的阈值,所以当区域内的众数(也就是最多的颜色),范围在这个阈值内,就说明是红色的圆。#l_mode(),a_mode(),b_mode()是L通道,A通道,B通道的众数。if 0<statistics.l_mode()<100 and 0<statistics.a_mode()<127 and 0<statistics.b_mode()<127:#if the circle is redimg.draw_circle(c.x(), c.y(), c.r(), color = (255, 0, 0))#识别到的红色圆形用红色的圆框出来else:img.draw_rectangle(area, color = (255, 255, 255))#将非红色的圆用白色的矩形框出来print("FPS %f" % clock.fps())

roi的格式是(x, y, w, h)的tupple.

  • x:ROI区域中左上角的x坐标
  • y:ROI区域中左上角的y坐标
  • w:ROI的宽度
  • h:ROI的高度

l_mean,l_median,l_mode,l_stdev,l_min,l_max,l_lq,l_uq,
a_mean,a_median,a_mode,a_stdev,a_min,a_max,a_lq,a_uq,
b_mean,b_median,b_mode,b_stdev,b_min,b_max,b_lq,b_uq,
是LAB三个通道的平均数,中位数,众数,标准差,最小值,最大值,第一四分数,第三四分数。


import sensor, image, timesensor.reset() # 初始化摄像头
sensor.set_pixformat(sensor.RGB565) # 格式为 RGB565.
sensor.set_framesize(sensor.QVGA)
sensor.skip_frames(10) # 跳过10帧,使新设置生效
sensor.set_auto_whitebal(False)               # Create a clock object to track the FPS.ROI=(80,30,15,15)while(True):img = sensor.snapshot()         # Take a picture and return the image.statistics=img.get_statistics(roi=ROI)color_l=statistics.l_mode()color_a=statistics.a_mode()color_b=statistics.b_mode()print(color_l,color_a,color_b)img.draw_rectangle(ROI)

从这三个历程中应该能写出我们的代码了吧

先把找颜色的小球代码前面复制下来

import sensor, image, time
r=red_threshold=(18, 69, 40, 86, 0, 72)
sensor.reset() # 初始化摄像头
sensor.set_pixformat(sensor.RGB565) # 格式为 RGB565.
sensor.set_framesize(sensor.QQVGA) # 使用 QQVGA 速度快一些
sensor.skip_frames(time = 2000) # 跳过2000s,使新设置生效,并自动调节白平衡
sensor.set_auto_gain(False) # 关闭自动自动增益。默认开启的,在颜色识别中,一定要关闭白平衡。
sensor.set_auto_whitebal(False)
clock = time.clock() # 追踪帧率while(True):pass

写我们的While循环(没成功,不行,放弃)

while(True):passclock.tick() # Track elapsed milliseconds between snapshots().img = sensor.snapshot() # 从感光芯片获得一张图像area = (0, 0, image.width(), image.height())#x,y,w,hstatistics=img.get_statistics(roi=area)if r[0]<statistics.l_mode()<r[1] and r[2]<statistics.a_mode()<r[3] and r[4]<statistics.b_mode()<r[5]:#if the circle is redimg.draw_rectangle(b[0:4]) # rectelse:img.draw_rectangle(area, color = (255, 255, 255))#将非红色的圆用白色的矩形框出来print("FPS %f" % clock.fps())blobs = img.find_blobs([red_threshold])if blobs:#如果找到了目标颜色for b in blobs:img.draw_rectangle(b[0:4]) # rectimg.draw_cross(b[5], b[6]) # cx, cyprint(b)

最终思路和代码:

哈哈,发现有个更简单的方法

area = (0, 0, 80, 80)#x,y,w,h
sensor.set_windowing(area) #取中间的80*80区域

最终代码


import sensor, image, time
red_threshold=(18, 69, 40, 86, 0, 72)
sensor.reset() # 初始化摄像头
sensor.set_pixformat(sensor.RGB565) # 格式为 RGB565.
sensor.set_framesize(sensor.QQVGA) # 使用 QQVGA 速度快一些
sensor.skip_frames(time = 2000) # 跳过2000s,使新设置生效,并自动调节白平衡
sensor.set_auto_gain(False) # 关闭自动自动增益。默认开启的,在颜色识别中,一定要关闭白平衡。
sensor.set_auto_whitebal(False)
clock = time.clock() # 追踪帧率while(True):clock.tick() # Track elapsed milliseconds between snapshots().img = sensor.snapshot() # 从感光芯片获得一张图像area=(0,0,80,120)blobs = img.find_blobs([red_threshold],roi=area)if blobs:#如果找到了目标颜色for b in blobs:img.draw_rectangle(b[0:4]) # rectimg.draw_cross(b[5], b[6]) # cx, cypassprint(clock.fps())

结果

OpenMv色块追踪算法的改善

思路借鉴:https://blog.csdn.net/jiejiemcu/article/details/80579893

import sensor, image, time
red_threshold=(18, 69, 40, 86, 0, 72)
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QQVGA)
sensor.skip_frames(20)
sensor.set_auto_whitebal(False)
#关闭白平衡。白平衡是默认开启的,在颜色识别中,需要关闭白平衡
clock = time.clock()
while(True):img = sensor.snapshot()blobs = img.find_blobs([red_threshold],area_threshold=4)if blobs:last_blobs = blobsbreak
while(True):clock.tick()img = sensor.snapshot()if last_blobs:for b in blobs:x1 = b[0]-7y1 = b[1]-7w1 = b[2]+12h1 = b[3]+12#print(b.cx(),b.cy())roi2 = (x1,y1,w1,h1)print(roi2)blobs = img.find_blobs([red_threshold],roi = roi2,area_threshold=4)last_blobs = blobsimg.draw_rectangle(b[0:4])img.draw_cross(b[5], b[6])else:blobs = img.find_blobs([red_threshold],area_threshold=4)last_blobs = blobsprint("帧率 : ",clock.fps())


发现有个问题就是它一般识别中间的小球,结合识别最大小球?

思路,把思路写下来,唉,好烦没写出来前
思路:
首先拍一张照,找到最大色块,然后,在色块周围的兴趣区域搜索红色,画框,如果兴趣区没找到红色,就在整个屏幕找
还是有思路,实现就很简单啦!!!!

初级:还是不行

import sensor, image, time
red_threshold=(18, 69, 40, 86, 0, 72)
area=(0,0,160,120)
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QQVGA)
sensor.skip_frames(20)
sensor.set_auto_whitebal(False)
#关闭白平衡。白平衡是默认开启的,在颜色识别中,需要关闭白平衡
clock = time.clock()def find_max(blobs):max_size=0for blob in blobs:if blob[2]*blob[3] > max_size:max_blob=blobmax_size = blob[2]*blob[3]return max_blobdef find_maxball(ball_threshold):passclock.tick() # Track elapsed milliseconds between snapshots().img = sensor.snapshot() # Take a picture and return the image.blobs = img.find_blobs([ball_threshold],roi=area)if blobs:max_blob = find_max(blobs)img.draw_rectangle(max_blob[0:4]) # rectimg.draw_cross(max_blob[5], max_blob[6]) # cx, cyreturn(max_blob)while(True):track=find_maxball(red_threshold)if track:print('track=',track)x1=track[0]-7y1=track[1]-7w1=track[2]+12h1=track[3]+12area=(x1,y1,w1,h1)print('area=',area,area[1])else:print('跳出范围了')area=(0,0,160,120)print("帧率 : ",clock.fps())

不知不觉写成了可以多色块追踪

import sensor, image, time
red_threshold=(18, 69, 40, 86, 0, 72)
area=(0,0,160,120)
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QQVGA)
sensor.skip_frames(20)
sensor.set_auto_whitebal(False)
#关闭白平衡。白平衡是默认开启的,在颜色识别中,需要关闭白平衡
clock = time.clock()def find_max(blobs):max_size=0for blob in blobs:if blob[2]*blob[3] > max_size:max_blob=blobmax_size = blob[2]*blob[3]return max_blobdef find_maxball(ball_threshold,area):passclock.tick() # Track elapsed milliseconds between snapshots().img = sensor.snapshot() # Take a picture and return the image.blobs = img.find_blobs([ball_threshold],roi=area)print(blobs)if blobs:max_blob = find_max(blobs)img.draw_rectangle(max_blob[0:4]) # rectimg.draw_cross(max_blob[5], max_blob[6]) # cx, cyreturn(max_blob)def track_maxball(red_threshold,area):track=find_maxball(red_threshold,area)if track:print('track=',track)x1=track[0]-2y1=track[1]-2w1=track[2]+4h1=track[3]+4area=(x1,y1,w1,h1)print('area=',area,area[1])else:print('跳出范围了')area=(0,0,160,120)return(track)print("帧率 : ",clock.fps())while(True):for i in range(50):track=find_maxball(red_threshold,area)if track!=None:print('找到了最大小球,追踪最大小球')while(True):print(track)clock.tick() # Track elapsed milliseconds between snapshots().img = sensor.snapshot() # Take a picture and return the image.x1=track[0]-2y1=track[1]-2w1=track[2]+4h1=track[3]+4area=(x1,y1,w1,h1)print('area=',area)blobs = img.find_blobs([red_threshold])if blobs:for b in blobs:print('成功追踪',b)img.draw_rectangle(b[0:4]) # rectelse:print('丢失目标')else:print('没找着,继续找最大')

真真真最后结果:

还没简化,笑哭死,简化需要area是全局变量还是什么的

import sensor, image, time
red_threshold=(18, 69, 40, 86, 0, 72)
area=(0,0,160,120)
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QQVGA)
sensor.skip_frames(20)
sensor.set_auto_whitebal(False)
#关闭白平衡。白平衡是默认开启的,在颜色识别中,需要关闭白平衡
clock = time.clock()def find_max(blobs):max_size=0for blob in blobs:if blob[2]*blob[3] > max_size:max_blob=blobmax_size = blob[2]*blob[3]return max_blobdef find_maxball(ball_threshold,area):passclock.tick() # Track elapsed milliseconds between snapshots().img = sensor.snapshot() # Take a picture and return the image.blobs = img.find_blobs([ball_threshold],roi=area)print(blobs)if blobs:max_blob = find_max(blobs)img.draw_rectangle(max_blob[0:4]) # rectimg.draw_cross(max_blob[5], max_blob[6]) # cx, cyreturn(max_blob)def track_maxball(red_threshold,area):track=find_maxball(red_threshold,area)if track:print('track=',track)x1=track[0]-2y1=track[1]-2w1=track[2]+4h1=track[3]+4area=(x1,y1,w1,h1)print('area=',area,area[1])else:print('跳出范围了')area=(0,0,160,120)return(track)print("帧率 : ",clock.fps())while(True):for i in range(50):track=find_maxball(red_threshold,area)if track!=None:print('找到了最大小球,追踪最大小球')while(True):print(track)x1=track[0]-2y1=track[1]-2w1=track[2]+4h1=track[3]+4area=(x1,y1,w1,h1)print('area=',area)while(True):clock.tick() # Track elapsed milliseconds between snapshots().img = sensor.snapshot() # Take a picture and return the image.blobs = img.find_blobs([red_threshold],roi=area)if blobs:for b in blobs:x1=b[0]-4y1=b[1]-4w1=b[2]+8h1=b[3]+8area=(x1,y1,w1,h1)print('area=',area)print('成功追踪',b)img.draw_rectangle(area[0:4]) # rectimg.draw_rectangle(b[0:4]) # rectelse:print('丢失目标')area=(0,0,160,120)else:print('没找着,继续找最大')

【感兴区roi学习应用】OpenMv如何只识别左边屏幕里面的红色小球相关推荐

  1. TensorRT是NVIDIA开发的深度学习推理工具,只支持推理,不支持训练 引

    . TensorRT是NVIDIA开发的深度学习推理工具,只支持推理,不支持训练:   目前TensorRT3已经支持Caffe.Caffe2.TensorFlow.MxNet.Pytorch等主流深 ...

  2. [学习之道] 修福不修慧,大象披璎珞; 修慧不修福,罗汉托空钵 (学习写程序,只靠补习上课吗?)...

    这是我的备份,原文请看 http://www.dotblogs.com.tw/mis2000lab/archive/2014/09/17/learning-and_do-it_20140917.asp ...

  3. 舒适区、学习区、恐慌区

    心理学研究中关于人对于外部世界的认识,分为三个区域:舒适区(comfort zone),学习区(stretch zone)和恐慌区(stress zone).     在舒适区我们得心应手,每天处于熟 ...

  4. 心理学之舒适区、学习区、恐慌区

    #1.心理学之舒适区.学习区.恐慌区的定义 心理学研究说,人类对于外部世界的认识可分为三个区域: 舒适区(comfort-zone), 学习区(stretch-zone), 和恐慌区(stress-z ...

  5. OpenMV多颜色识别详解

    需提前观看:OpenMV单颜色识别详解: 多颜色识别和单颜色识别差不多,只需要改动[thresholds[threshold_index]]这个地方 #更改之前 for blob in img.fin ...

  6. 基于openmv的色域识别(测距和测角度)

    基于openmv的色域识别和巡线代码 写在前面:由于最近做比赛和着急,有很多东西都是着急去实现并没有做整理,直到昨天才觉得感觉到内心的空虚,发现知识并没有成型,所以决定来写写总结.做些看似有意义的东西 ...

  7. 《智能步态识别门禁系统》,基于深度学习的多人步态识别系统

    本文章仅仅提供一种自认为比较科学的方式去实现多人步态识别,如果对多人步态识别感兴趣,却又不知道如何实现的话,这篇文章将会有莫大的帮助.以下方法作者皆实验过是可行的方案.(训练集124人,准确率96%, ...

  8. 【深度学习】论文EMO单眼识别分析

    [深度学习]论文EMO单眼识别分析 文章目录1 研究背景 2 所提方法 3 创新点 4 实验结果 5 结论与思考 1 研究背景 情绪是一种心理和生理状态,伴随着认知过程.对情绪的研究已经存在了很长时间 ...

  9. 基于迁移深度学习的雷达信号分选识别

    基于迁移深度学习的雷达信号分选识别 人工智能技术与咨询 来源:<软件学报> ,作者王功明等 摘要: 针对当前雷达信号分选识别算法普遍存在的低信噪比下识别能力差.特征参数提取困难.分类器模型 ...

最新文章

  1. Eclipse设置字体
  2. MATLAB从入门到精通-新增返回数组高、宽数字特征的全新方式
  3. 论文笔记:KD-Net
  4. 《岸上的波妞》观后感
  5. 小米集团:副董事长林斌承诺5年内不出售公司股份 已作安排的除外
  6. 拥有开源安全背景的开发员当选白宫技术总监
  7. 网络***检查分析---破解安全隐患问题回答
  8. 使用均匀分布验证中心极限定理)
  9. InputBox接收数字,并将该数字转成int型
  10. DW_axi_dmac控制器(术语)
  11. Eclipse插件Target Management (RSE)
  12. win10更新之后解决任务栏卡顿问题
  13. python计算线性相关系数_Python+pandas计算数据相关系数(person、Kendall、spearman)
  14. springboot2------自定义消息转换器
  15. 如何免费学习Python?分享我自己的学习经验
  16. sql语句insert插入函数如果values值括号里放变量名
  17. 【STM32编程】一个定时器生成多路PWM波形的原理和方法
  18. 医学统计学 第八章( t 检验)
  19. 当今情势下,如何通过自媒体平台轻松赚钱
  20. 女人永远不知道的十件事!

热门文章

  1. stm32实现波形发生器
  2. 剑指offer:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。
  3. NLP 中文分词-双向匹配算法(理论+Python实现)
  4. gpu服务器压力测试方法,如何用Furmark对GPU进行压力测试?
  5. 影响工程项目进度的因素有哪些
  6. AI+视频技术助力保障校园安全,校园智能安防平台该如何建设?
  7. 闲山:龙的出现,没有中文字幕怎么办? 自己编程搞一个试试
  8. python的列表与元素基本操作
  9. Linux技术--mysql数据库基础操作
  10. arcade 物理系统_RetroPie和X-Arcade Tankstick-完美的Retro Arcade(加上键绑定,配置和操作方法)