• 安装星瞳实验室APP,快速收到回复。扫描二维码或者点击 https://singtown.com/app/
  • 必看:玩转星瞳论坛了解一下图片上传,代码格式等问题。
  • 一个提问,一个帖子,标题为问题的介绍
  • 请贴出具体的代码,与报错提示。
  • 代码一定要让别人可以运行的文本,不要贴图片
  • 求大佬看一下为什么我的摄像头有时候会把色块的中心坐标(x,y)反过来输出(y,x)?



    • 我在用OPEN MV做一个寻找色块的小项目,要求只输出区域面积最大的框形坐标,当两个框进行比较的时候,已经能找到面积最大的框。但是本来应该是输出(x,y)的,有时候会输出(y,x),这是什么情况?求大佬解释

      • 下面第二个图中,大的数字是x坐标,小的数字是y坐标。
        0_1521891004672_1.png
        0_1521891018083_QQ图片20180324192947.png

      • Insert Code Here

      Insert Code Here

      #寻找红色色块并输出中心点坐标
      import sensor, image, time
      import json
      from pyb import UART
      
      red_threshold = ((85, 17, 81, 4, -19, 39))
      
      sensor.reset() # Initialize the camera sensor.
      sensor.set_pixformat(sensor.RGB565) # use RGB565.
      sensor.set_framesize(sensor.QQVGA) # use QQVGA for speed.
      sensor.skip_frames(10) # Let new settings take affect.
      sensor.set_auto_whitebal(False) # turn this off.
      clock = time.clock() # Tracks FPS.
      
      uart = UART(3, 115200)
      i=0
      m=20 #在40帧的情况下,每0.5秒输给串口一次数据
      while(True):
      clock.tick() #开时钟
      img = sensor.snapshot() # Take a picture and return the image.
      if i==m:
      i=0
      elif i<m:
      i=i+1
      blobs = img.find_blobs([red_threshold],area_threshold=50,pixels_threshold=50,margin=1,merge=True)
      #红色,面积最小阈值10,像素阈值10,色块合并
      if blobs:
      print('sum : %d'% len(blobs))
      data=[]
      data1=[]
      a=len(blobs)
      if a==1:
      for b in blobs:
      img.draw_rectangle(b.rect()) # 画框
      img.draw_cross(b.cx(), b.cy()) # 框型的中心坐标
      data.append((b.cx(),b.cy())) #外框中心坐标存进data数组的末尾
      data_out = json.dumps(set(data))
      if i==m:
      uart.write(data_out +'\n')
      print(data_out)
      elif a==2:
      for b in blobs:
      img.draw_rectangle(b.rect()) # 画框
      img.draw_cross(b.cx(), b.cy()) # 框型的中心坐标
      data1.append(b.area()) #外框面积存进data1数组
      data.append((b.cx(),b.cy())) #外框中心坐标存进data数组
      if data1[0]>=data1[1]: #如果第一个框的面积大于第二个框,把第一个框的中心坐标输出
      data_out = json.dumps(set(data[0]))
      elif data1[0]<data1[1]:
      data_out = json.dumps(set(data[1]))
      if i==m:
      uart.write(data_out +'\n'))
      print(data_out)
      


    • 你把整个的代码传一下,我测试一下



    • @kidswong999 已经上传,万分感谢!



    • @kidswong999 小智智,能不能把我20天前上传的这个问题看一下呢?我急用,谢谢了。



    • 你的代码没有缩进,我运行不了



    • 而且,为什么你觉得x和y反了呢。。。



    • @kidswong999
      我把摄像头和检测物体都固定位置,放在一个x大于y的位置,他就会有时先输出小一些的数,那就是反了吧?今天被莫名其妙的解决了。我无意间发现,output=json.dumps([b.cx(),b.cy()]) 输出是正常的,但是如果换成output=json.dumps({b.cx(),b.cy()}) 他的输出就会出现我前文描述的问题。这是为什么呢?



      • []是列表,里面的元素是有顺序的
      • {}是字典,里面的元素是无顺序的


    • @kidswong999 哦哦,谢谢了。