我怎样才能使findcontour变慢?

时间:2019-02-15 15:39:36

标签: python opencv

我想找到一个物体的速度。 首先,我测量哪一个球传到那里的两个点,以及它们之间的差异以找到长度。还有时间 最后,我将长度除以时间,以得到速度,但是..

我的问题是计算机可以非常快速地找到视频中的轮廓。当我使用time.sleep()时,视频开始出现滞后。我不想这样。 我只希望“寻找轮廓的速度变慢”而没有任何fps或延迟(我不知道)改变

for c in cnts :
    M = cv2.moments(c)
    cX = int(M["m10"] / M["m00"])
    cY = int(M["m01"] / M["m00"])
    x, y, w, h = cv2.boundingRect(c)
    cv2.rectangle(video, (x, y), (x + w, y + h), (0, 255, 0), 2)
    cv2.circle(video, (cX,cY),7,(255,255,255),-1)

if cX != cX1:
    start1 = time.time()
    Lenght = math.sqrt(abs(cX-cX1)*abs(cX-cX1)+abs(cY-cY1)*abs(cY-cY1))
    Time = start1-end1
    Velocity = Lenght/Time
    print(Velocity)
    end1 = time.time()
cX1 = cX
cY1 = cY

2 个答案:

答案 0 :(得分:1)

您是否可以获取帧时间并根据此值测量帧之间的速度:

_, frame1 = video.read()
t1 = video.get(cv2.CAP_PROP_POS_MSEC)
_, frame2 = video.read()
t2 = video.get(cv2.CAP_PROP_POS_MSEC)
diff_sec = (t2 - t1) / 1000.0

答案 1 :(得分:0)

好的,我已经用此代码修复了

for i in range(0,1):
    start2 = time.time()
    if start2-end2>1.0 :
        cnts,_ = cv2.findContours(video, cv2.RETR_TREE , cv2.CHAIN_APPROX_SIMPLE)
    end2 = time.time()