识别色块,计算色块中心坐标移动速度?
-
如题,请问openmv可不可以实现计算移动色块的速度的功能,我的想法是获得相邻两帧色块中心坐标的变化,计算出移动距离,再用这个距离值除以帧率的倒数,算出来速度,但是问题在于我不知道如何保存住上一帧的色块中心坐标的值,请各位帮帮我,如何解决这个问题?
import sensor, image, time from pyb import UART import json threshold = [((71, 100, -70, -29, -103, 127)) ] sensor.reset() sensor.set_pixformat(sensor.RGB565) sensor.set_framesize(sensor.QVGA) sensor.skip_frames(time = 2000 ) sensor.set_auto_whitebal(False) clock = time.clock() uart = UART(3, 115200) uart.init(115200, bits=8, parity=None, stop=1) while(True): clock.tick() img = sensor.snapshot() blob = img.find_blobs(threshold, area_threshold=300) if blob: FH = bytearray([0x2c,0x12]) uart.write(FH) for b in blob: img.draw_rectangle(b[0:4]) img.draw_cross(b[5], b[6]) x = b.cx() y = b.cy()
这个是我的代码,只可以实时获得色块重心坐标值,我不太懂如何存储这个值,如果解决了这个问题,我想速度可以计算出。
或者请大佬赐教,有没有其他办法获得色块移动速度
-
你可以用utime.ticks_ms()计算时间
用一个全局变量存。上一次的坐标 = (0,0) 上一次的时间 = utime.ticks_ms() while True: img = sensor.snapshot() blobs = img.find_blobs() 这一次的坐标 = [blobs[0].cx(), blobs[0].cy()] 这一次的时间 = utime.ticks_ms() 位移差 = 这一次的坐标 - 上一次的坐标 时间差 = 这一次的时间 - 上一次的时间 上一次的坐标 = 这一次的坐标 上一次的时间 = 这一次的时间
-
@kidswong999 openmv的IDE如何实现列表的加减乘除运算啊,实际的python可以调用numpy模块将列表转换成数组,请问这个如何运算,谢谢!!!
-
@2cbt import math
-
@kidswong999 在 识别色块,计算色块中心坐标移动速度? 中说:
utime.ticks_ms()
恩恩谢谢你,问题解决啦
-
你好,能不能把你的code贴上来借鉴一下,谢谢。