• 免费好用的星瞳AI云服务上线!简单标注,云端训练,支持OpenMV H7和OpenMV H7 Plus。可以替代edge impulse。 https://forum.singtown.com/topic/9519
  • 我们只解决官方正版的OpenMV的问题(STM32),其他的分支有很多兼容问题,我们无法解决。
  • 如果有产品硬件故障问题,比如无法开机,论坛很难解决。可以直接找售后维修
  • 发帖子之前,请确认看过所有的视频教程,https://singtown.com/learn/ 和所有的上手教程http://book.openmv.cc/
  • 每一个新的提问,单独发一个新帖子
  • 帖子需要目的,你要做什么?
  • 如果涉及代码,需要报错提示全部代码文本,请注意不要贴代码图片
  • 必看:玩转星瞳论坛了解一下图片上传,代码格式等问题。
  • openmv在光流的绝对旋转变换例程中,出现完美的夹具,这个夹具具体是指什么



    • 1_1565014197985_3.PNG 0_1565014197981_2.PNG

      # 光流绝对旋转变换示例
      
      #
      
      # 此示例显示使用OpenMV Cam通过将当前图像与先前图像相互比较来测量旋转/缩放。 
      
      # 请注意,在此模式下仅处理旋转/缩放 - 而不是X和Y平移。
      
      
      
      # 要有效地运行此演示,请将OpenMV安装在稳固的底座上,
      
      # 然后 慢慢地 围绕镜头旋转摄像机,并向前/向后移动摄像机以查看数字的变化。
      
      # 即仅改变z方向。
      
      
      
      import sensor, image, time, math
      
      
      
      # 注意!!! 使用find_displacement()时,必须使用2的幂次方分辨率。 
      
      # 这是因为该算法由称为相位相关的东西提供动力,该相位相关使用FFT进行图像比较。 
      
      # 非2的幂次方分辨率要求填充到2的幂,这降低了算法结果的有用性。 
      
      # 请使用像B64X64或B64X32这样的分辨率(快2倍)。
      
      
      
      # 您的OpenMV Cam支持2的幂次方分辨率64x32,64x64,128x64和128x128。
      
      # 如果您想要32x32的分辨率,可以通过在64x64图像上执行“img.pool(2,2)”来创建它。
      
      
      
      sensor.reset()                      # Reset and initialize the sensor.
      
      sensor.set_pixformat(sensor.RGB565) # Set pixel format to RGB565 (or GRAYSCALE)
      
      sensor.set_framesize(sensor.B64X64) # Set frame size to 64x64... (or 64x32)...
      
      sensor.skip_frames(time = 2000)     # Wait for settings take effect.
      
      clock = time.clock()                # Create a clock object to track the FPS.
      
      
      
      # 从主帧缓冲区的RAM中取出以分配第二帧缓冲区。
      
      # 帧缓冲区中的RAM比MicroPython堆中的RAM多得多。
      
      # 但是,在执行此操作后,您的某些算法的RAM会少得多......
      
      # 所以,请注意现在摆脱RAM问题要容易得多。
      
      extra_fb = sensor.alloc_extra_fb(sensor.width(), sensor.height(), sensor.RGB565)
      
      extra_fb.replace(sensor.snapshot())
      
      
      
      while(True):
      
          clock.tick() # Track elapsed milliseconds between snapshots().
      
          img = sensor.snapshot() # Take a picture and return the image.
      
      
      
          # 如果没有完美的夹具,这个算法很难测试......所以,这是一个让它看起来有效的骗子...
      
          # 在下面输入一个z_rotation值,你应该看到r的输出等于它。
      
          if(0):
      
              expected_rotation = 20.0
      
              img.rotation_corr(z_rotation=expected_rotation)
      
      
      
          # 如果没有完美的夹具,这个算法很难测试......所以,这是一个让它看起来有效的骗子...
      
          # 在下面输入一个z_rotation值,你应该看到r的输出等于它。
      
          if(0):
      
              expected_zoom = 0.8
      
              img.rotation_corr(zoom=expected_zoom)
      
      
      
          # 对于此示例,我们从不更新旧图像以测量绝对变化。
      
          displacement = extra_fb.find_displacement(img, logpolar=True)
      
      
      
          # 没有滤波,偏移结果是嘈杂的,所以我们降低了一些精度。
      
          rotation_change = int(math.degrees(displacement.rotation()) * 5) / 5.0
      
          zoom_amount = displacement.scale()
      
      
      
          if(displacement.response() > 0.1): # 低于0.1左右(YMMV),结果只是噪音。
      
              print("{0:+f}r {1:+f}z {2} {3} FPS".format(rotation_change, zoom_amount, \
      
                    displacement.response(),
      
                    clock.fps()))
      
          else:
      
              print(clock.fps())