0
假設您有一個採樣率爲512的溫度數據。我想通過與相機圖像同步來記錄這些數據。結果記錄將只是一個視頻文件。Python蒙太奇在OpenCV圖像上繪製一張圖並記錄爲視頻
我可以用matplotlib和pyqtgraph繪製這些數據。
我用matplotlib做了,但視頻採樣率正在下降。這是隨機傳入數據的代碼。
import cv2
import numpy as np
import matplotlib.pyplot as plt
cap = cv2.VideoCapture(0) # video source: webcam
fourcc = cv2.cv.CV_FOURCC(*'XVID') # record format xvid
out = cv2.VideoWriter('output.avi',fourcc, 1, (800,597)) # output video : output.avi
t = np.arange(0, 512, 1)# sample time axis from 1 to 512
while(cap.isOpened()): # record loop
ret, frame = cap.read()# get frame from webcam
if ret==True:
nse = np.random.randn(len(t))# generate random data squence
plt.subplot(1, 2, 1)# subplot random data
plt.plot(t, nse)
plt.subplot(1, 2, 2)# subplot image
plt.imshow(frame)
# save matplotlib subplot as last.png
plt.savefig("last.png")
plt.clf()
img=cv2.imread("last.png") # read last.png
out.write(img) # record last.png image to output.avi
cv2.imshow('frame',img)
if cv2.waitKey(1) & 0xFF == ord('q'): # exit with press q button in frame window
break
else:
break
cap.release() # relase webcam
out.release() # save video
cv2.destroyAllWindows() # close all windows
也許磁盤I/O正在減慢循環。我做類似的東西,但我不會使用matplotlib,而是使用cv2.line,cv2.polylines等直接在numpy數組圖像數據(零或幀)上繪製圖形,然後我們可以將該numpy緩衝區發送給cv2.VideoWriter,就像你在做。 – otterb
你可以分享繪製numpy數組的opencv繪圖函數嗎?我需要看到價值觀和變化。 opencv繪圖函數足夠了嗎? – acs
如果你可以得到所有點的x,y座標(t,nse),那麼你可以使用'cv2.polylines'在numpy數組上繪製它http://docs.opencv.org/2.4/modules/core/ doc/drawing_functions.html#多義線 – otterb