簡體   English   中英

打開 cv 光流箭頭

[英]Open cv Optical Flow Arrowed

任何opencv專家來幫忙!! 我需要繪制箭頭來可視化 lukas kanade 方法的光流,為此我使用了箭頭線,但是箭頭的方向不正確,而且它們似乎不正確。

這是代碼的一部分:

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)

這是輸出:
1

用箭袋我得到了這個:
2

但是在這種情況下我必須使用箭頭線,請如果有專家可以幫助解決這個問題。 我一直在嘗試解決它一段時間以來,但還沒有結果。

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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM