[英]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)
但是在這種情況下我必須使用箭頭線,請如果有專家可以幫助解決這個問題。 我一直在嘗試解決它一段時間以來,但還沒有結果。
cv2.arrowedLine的參數是cv.arrowedLine(img, pt1, pt2, color)
而不是cv.arrowedLine(img, pt1, vx_vy, color)
。
pt1
- 箭頭開始的點。pt2
- 箭頭指向的點。 您可以將v_x
和v_y
添加到a
和b
:
mask = cv2.arrowedLine(mask, (int(a),int(b)), (int(a)+v_x, int(b)+v_y), (255, 255, 255), 1)
我不知道是否還有其他問題,因為您沒有發布p0
、 p1
、 dt
、 scale
,而且我不知道運動向量和點的格式。
下次請貼一個可執行代碼示例。
我創建了以下(可執行)代碼示例用於測試:
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.