导航

    • 登录
    • 搜索
    • 版块
    • 产品
    • 教程
    • 论坛
    • 淘宝
    1. 主页
    2. mukurio
    M
    • 举报资料
    • 资料
    • 关注
    • 粉丝
    • 屏蔽
    • 帖子
    • 楼层
    • 最佳
    • 群组

    mukurio

    @mukurio

    -1
    声望
    6
    楼层
    1584
    资料浏览
    0
    粉丝
    0
    关注
    注册时间 最后登录

    mukurio 关注

    mukurio 发布的帖子

    • 如何单独一次输出色块中心坐标

      import sensor, image, time
      import math
      from pyb import UART
      import json

      下面的阈值, 可能需要大家手动调节

      thresholds = [(35, 40,55, 62, 20, 51), # 一般情况下的红色阈值
      (43, 55, -45, -32, 2, 20), # 一般情况下的绿色阈值
      (45, 65, -20, 30, -60, -20)] # 一般情况下的蓝色阈值

      sensor.reset()
      sensor.set_pixformat(sensor.RGB565)
      sensor.set_framesize(sensor.QVGA)
      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()

      uart = UART(3, 115200)

      QVGA: 320x240

      WINDOW_CENTER_X = 160
      WINDOW_CENTER_Y = 120

      标记当前识别的颜色

      def markCurColor(img, cName, cRgb):
      img.draw_string(0, 0, cName, color = cRgb)

      如果是红色,执行此函数

      def doWithRed(img):
      markCurColor(img, "RED", (255, 0, 0))

      如果是绿色,执行此函数

      def doWithGreen(img):
      markCurColor(img, "GREEN", (0, 255, 0))

      如果是绿色,执行此函数

      def doWithBlue(img):
      markCurColor(img, "BLUE", (0, 0, 255))

      颜色代码与所对应需要执行函数的映射

      colorCodeMapFunc = {
      1: doWithRed,
      2: doWithGreen,
      4: doWithBlue
      }

      测算色块的中心与中心的距离

      def distanceToCenter(blob):
      winCx = WINDOW_CENTER_X
      winCy = WINDOW_CENTER_Y
      x = blob.x()
      y = blob.y()

      return math.sqrt(math.pow(winCx - x, 2) + math.pow(winCy - y, 2))
      

      比较两个色块距离的函数

      def compareBlob(blob1, blob2):
      # 这里我们选择了pixels作为指标比对二者的代码
      # 你也可以换用其它指标 例如 blob.area()
      tmp = distanceToCenter(blob1) - distanceToCenter(blob2)
      if tmp == 0:
      return 0;
      elif tmp > 0:
      return 1;
      else:
      return -1;

      while(True):
      clock.tick()
      bigBlob = None #最大的色块
      img = sensor.snapshot()

      blobs = img.find_blobs( thresholds, pixels_threshold=200, area_threshold=200, merge=True)
      
      # 判断是否有色块检测到
      if len(blobs) == 0:
          continue
      
      bigBlob = blobs[0]
      for blob in blobs:
          # 如果此色块比最大的色块还大
          if compareBlob(bigBlob, blob) == 1:
              bigBlob = blob
      
          # 标注其他色块
          img.draw_rectangle(blob.rect())
      
      # 标记识别到的最大色块
      
      img.draw_cross(bigBlob.cx(), bigBlob.cy())
      # 根据最大色块的颜色调用不同的函数
      
      img.draw_cross(WINDOW_CENTER_X, WINDOW_CENTER_Y,  color=(255, 0, 0))
      img.draw_line((WINDOW_CENTER_X, WINDOW_CENTER_Y, bigBlob.cx(), bigBlob.cy()), color=(255, 0, 0))
      if bigBlob.code() in colorCodeMapFunc:
          colorCodeMapFunc[bigBlob.code()](img)
          output_str="[%d,%d]" % (bigBlob.cx(),bigBlob.cy()) #方式1
          #output_str=json.dumps([bigBlob.cx(),bigBlob.cy()]) #方式2
          print('you send:',output_str)
          uart.write(output_str+'\r\n')
      else:
      
          print("code not match" )
      

      目前是连续输出坐标

      发布在 OpenMV Cam
      M
      mukurio
    • RE: openmv 运行程序后变绿 需要重新断开再连接

      可能和光线不稳定有关吧。。。 请问你能帮我看下如何只输出一次坐标吗?

      发布在 OpenMV Cam
      M
      mukurio
    • openmv 运行程序后变绿 需要重新断开再连接

      0_1524468342991_TIM截图20180423152439.png !
      0_1524468365115_TIM图片20180423152556.png

      实验代码

      import sensor, image, time
      import math
      from pyb import UART
      import json

      下面的阈值, 可能需要大家手动调节

      thresholds = [(35, 40,55, 62, 20, 51), # 一般情况下的红色阈值
      (43, 55, -45, -32, 2, 20), # 一般情况下的绿色阈值
      (45, 65, -20, 30, -60, -20)] # 一般情况下的蓝色阈值

      sensor.reset()
      sensor.set_pixformat(sensor.RGB565)
      sensor.set_framesize(sensor.QVGA)
      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()

      uart = UART(3, 115200)

      QVGA: 320x240

      WINDOW_CENTER_X = 160
      WINDOW_CENTER_Y = 120

      标记当前识别的颜色

      def markCurColor(img, cName, cRgb):
      img.draw_string(0, 0, cName, color = cRgb)

      如果是红色,执行此函数

      def doWithRed(img):
      markCurColor(img, "RED", (255, 0, 0))

      如果是绿色,执行此函数

      def doWithGreen(img):
      markCurColor(img, "GREEN", (0, 255, 0))

      如果是绿色,执行此函数

      def doWithBlue(img):
      markCurColor(img, "BLUE", (0, 0, 255))

      颜色代码与所对应需要执行函数的映射

      colorCodeMapFunc = {
      1: doWithRed,
      2: doWithGreen,
      4: doWithBlue
      }

      测算色块的中心与中心的距离

      def distanceToCenter(blob):
      winCx = WINDOW_CENTER_X
      winCy = WINDOW_CENTER_Y
      x = blob.x()
      y = blob.y()

      return math.sqrt(math.pow(winCx - x, 2) + math.pow(winCy - y, 2))
      

      比较两个色块距离的函数

      def compareBlob(blob1, blob2):
      # 这里我们选择了pixels作为指标比对二者的代码
      # 你也可以换用其它指标 例如 blob.area()
      tmp = distanceToCenter(blob1) - distanceToCenter(blob2)
      if tmp == 0:
      return 0;
      elif tmp > 0:
      return 1;
      else:
      return -1;

      while(True):
      clock.tick()
      bigBlob = None #最大的色块
      img = sensor.snapshot()

      blobs = img.find_blobs( thresholds, pixels_threshold=200, area_threshold=200, merge=True)
      
      # 判断是否有色块检测到
      if len(blobs) == 0:
          continue
      
      bigBlob = blobs[0]
      for blob in blobs:
          # 如果此色块比最大的色块还大
          if compareBlob(bigBlob, blob) == 1:
              bigBlob = blob
      
          # 标注其他色块
          img.draw_rectangle(blob.rect())
      
      # 标记识别到的最大色块
      img.draw_circle(bigBlob.cx(), bigBlob.cy(), int( bigBlob.w() / 2 ), color = (0, 0, 0))
      img.draw_cross(bigBlob.cx(), bigBlob.cy())
      # 根据最大色块的颜色调用不同的函数
      
      img.draw_cross(WINDOW_CENTER_X, WINDOW_CENTER_Y,  color=(255, 0, 0))
      img.draw_line((WINDOW_CENTER_X, WINDOW_CENTER_Y, bigBlob.cx(), bigBlob.cy()), color=(255, 0, 0))
      if bigBlob.code() in colorCodeMapFunc:
          colorCodeMapFunc[bigBlob.code()](img)
          output_str="[%d,%d]" % (bigBlob.cx(),bigBlob.cy()) #方式1
          #output_str=json.dumps([bigBlob.cx(),bigBlob.cy()]) #方式2
          print('you send:',output_str)
          uart.write(output_str+'\r\n')
      else:
      
          print("code not match" )
      
      print(clock.fps())
      发布在 OpenMV Cam
      M
      mukurio
    • openmv 串口通信 发送数据 sdcard

      色块定位 发送中心位置 运行时候一直在发送,如何做到发送一次就够了?
      我现在需要openmv 配合dobot使用,dobot 通讯协议有TTL,是不是照教程里将RX TX GND 接起来就行了?

      另外我openmv使用sdcard 如何不用ide 运行py![1_1524455986830_TIM截图20180423115421.png 0_1524455986828_TIM截图20180423115558.png

      发布在 OpenMV Cam
      M
      mukurio
    • RE: openmv 串口通讯如何接线

      然后发送端 TX 接收端 RX 地线 GND 这三根线连起来就行了是吧?

      发布在 OpenMV Cam
      M
      mukurio
    • openmv 串口通讯如何接线

      目前openmv通过usb接线。TTL-USB模块也接PC USB。现需要PC进行通信实验。请问如何接线?

      发布在 OpenMV Cam
      M
      mukurio