【问题标题】:Open cv Optical Flow ArrowedOpencv 光流箭头
【发布时间】:2021-06-16 14:56:43
【问题描述】:

opencv 方面的高手来帮忙!! 我需要绘制箭头来可视化 lukas kanade 方法的光流,我为此使用了arrowedline,但箭头的方向不正确,它们看起来也不正确。

这是部分代码:

for i,(old,new) in enumerate(zip(p0,p1)):
    a, b = ravel(old)
    c, d = ravel(new)
    #displacement
    v_x = int((c - a)/dt)
    v_y = int((b - d)/dt)
    scale = 100
    v_x = int((c-a)/dt*scale)
    v_y = int((b-d)/dt*scale)

    mask = cv2.arrowedLine(mask, (int(a),int(b)),(v_x,v_y), color[i].tolist(), 1)
    image = cv2.rotate(mask, cv2.ROTATE_180)

这是输出:

我得到了这个:

但是在这种情况下我必须使用箭头线,请如果有专家可以帮助解决这个问题。 一段时间以来一直在尝试解决它,但还没有结果。

【问题讨论】:

    标签: python opencv opticalflow


    【解决方案1】:

    cv2.arrowedLine 的参数是cv.arrowedLine(img, pt1, pt2, color) 而不是cv.arrowedLine(img, pt1, vx_vy, color)

    • pt1 - 箭头的起点。
    • pt2 - 箭头指向的点。

    您可以将v_xv_y 添加到ab

    mask = cv2.arrowedLine(mask, (int(a),int(b)), (int(a)+v_x, int(b)+v_y), (255, 255, 255), 1)
    

    我不知道还有没有其他问题,因为你没有贴出p0p1dtscale的值,我不知道格式运动矢量和点。

    下一次,请发布一个可执行代码示例。


    我创建了以下(可执行)代码示例用于测试:

    import cv2
    import numpy as np
    
    mask = np.zeros((100, 100, 3), np.uint8)
    
    p0 = [np.array([50, 50])]
    p1 = [np.array([60, 60])]
    
    dt = 100
    
    for i, (old,new) in enumerate(zip(p0,p1)):
        a, b = np.ravel(old)
        c, d = np.ravel(new)
        #displacement
        v_x = int((c - a)/dt)
        v_y = int((b - d)/dt)
        scale = 100
        v_x = int((c-a)/dt*scale)
        v_y = int((b-d)/dt*scale)
    
        mask = cv2.arrowedLine(mask, (int(a),int(b)), (int(a)+v_x, int(b)+v_y), (255, 255, 255), 1)
        image = cv2.rotate(mask, cv2.ROTATE_180)
    
    cv2.imshow('image', image)
    cv2.waitKey()
    cv2.destroyAllWindows()
    

    【讨论】:

      猜你喜欢
      • 2016-04-05
      • 2021-12-23
      • 1970-01-01
      • 1970-01-01
      • 2023-04-01
      • 2021-08-29
      • 2014-07-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多