Tôi đang cố gắng sử dụng đầu ra của chức năng lưu lượng quang dày đặc của Opencv để vẽ một biểu đồ rung của các vectơ chuyển động nhưng không thể tìm thấy chức năng thực sự xuất ra. Đây là mã:Đầu ra từ chức năng lưu lượng quang dày đặc của OpenCV (Farneback) là gì? Làm thế nào điều này có thể được sử dụng để xây dựng một bản đồ lưu lượng quang học bằng Python?
import cv2
import numpy as np
cap = cv2.VideoCapture('GOPR1745.avi')
ret, frame1 = cap.read()
prvs = cv2.cvtColor(frame1,cv2.COLOR_BGR2GRAY)
hsv = np.zeros_like(frame1)
hsv[...,1] = 255
count=0
while(1):
ret, frame2 = cap.read()
next = cv2.cvtColor(frame2,cv2.COLOR_BGR2GRAY)
flow = cv2.calcOpticalFlowFarneback(prvs,next,None, 0.5, 3, 15, 3, 10, 1.2, 0)
mag, ang = cv2.cartToPolar(flow[...,0], flow[...,1])
hsv[...,0] = ang*180/np.pi/2
hsv[...,2] = cv2.normalize(mag,None,0,255,cv2.NORM_MINMAX)
rgb = cv2.cvtColor(hsv,cv2.COLOR_HSV2BGR)
if count==10:
count=0
print "flow",flow
cv2.imshow('frame2',rgb)
count=count+1
k = cv2.waitKey(30) & 0xff
if k == 27:
break
elif k == ord('s'):
prvs = next
cap.release()
cv2.destroyAllWindows()
Đây là mã có hiệu quả như được đưa ra trong hướng dẫn OpenCv về dòng quang dày đặc. Tôi nhận được kết quả sau từ chức năng in:
flow [[[ 0.00000000e+00 0.00000000e+00]
[ 0.00000000e+00 0.00000000e+00]
[ 0.00000000e+00 0.00000000e+00]
...,
[ 0.00000000e+00 0.00000000e+00]
[ 0.00000000e+00 0.00000000e+00]
[ 0.00000000e+00 0.00000000e+00]]
...,
[[ -3.54891084e-14 -1.38642463e-14]
[ -2.58058853e-14 -1.54020863e-14]
[ -5.56561768e-14 -1.88019359e-14]
...,
[ -7.59403916e-15 1.16633225e-13]
[ 7.22156371e-14 -1.61951507e-13]
[ -4.30715618e-15 -4.39530987e-14]]
[[ -3.54891084e-14 -1.38642463e-14]
[ -2.58058853e-14 -1.54020863e-14]
[ -5.56561768e-14 -1.88019359e-14]
...,
[ -7.59403916e-15 1.16633225e-13]
[ 7.22156371e-14 -1.61951507e-13]
[ -4.30715618e-15 -4.39530987e-14]]
Tôi muốn biết chính xác những giá trị này là gì? Gốc X, Y tọa độ? Các tọa độ X, Y cuối cùng? Đã di chuyển khoảng cách?
tôi có kế hoạch để thử và tìm tọa độ ban đầu và cuối cùng để thực hiện một âm mưu rung động sử dụng mã từ trang sau đây: https://www.getdatajoy.com/examples/python-plots/vector-fields Điều này là do trong python không có chức năng đó tôi nhận thức được rằng âm mưu một bản đồ quang học dòng chảy cho bạn.
Cảm ơn bạn trước!
Tuyệt vời, Cảm ơn bạn. Vì vậy, ma trận dòng chảy sẽ là một ma trận có cùng kích thước với hình ảnh gốc, và các giá trị X và Y được lưu trữ trong nó ở các vị trí nhất định sẽ là khoảng cách X và Y di chuyển đến nơi chúng hiện đang ở. Vì vậy, nếu tôi đã tìm ra nơi họ di chuyển từ tôi chỉ đơn giản sẽ sử dụng vị trí điểm ảnh hiện tại của họ trong ma trận dòng chảy và trừ khoảng cách X và Y họ đi du lịch? –
vâng, chính xác như vậy. –
làm tất cả các thuật toán dòng quang cho đầu ra theo đơn vị pixel? – asdf