[英]Convert an image shown in python, into an OpenCV image.
So, I would like to simply take an existing plot that I have made via plt.plot(x,y)
, convert it into an "image", so that I can then give it to OpenCV's video writer via:因此,我想简单地采用我通过
plt.plot(x,y)
制作的现有绘图,将其转换为“图像”,以便我可以通过以下方式将其提供给 OpenCV 的视频plt.plot(x,y)
:
cv2.VideoWriter('myMovie.avi', fourcc, 20.0, (640,480))
writer.write(image)
My problem is, given the figure I have already plotted, how do I get "image"?我的问题是,鉴于我已经绘制的图形,我如何获得“图像”?
Thanks.谢谢。
Before posting a solution, it may be easier if you just use matplotlib's animation to save a video.在发布解决方案之前,如果您只使用matplotlib 的动画来保存视频可能会更容易。 And here's the solution using
opencv
:这是使用
opencv
的解决方案:
import numpy as np
import cv2
import matplotlib.pyplot as plt
fig = plt.figure()
x1 = np.linspace(0.0, 5.0)
x2 = np.linspace(0.0, 2.0)
y1 = np.cos(2 * np.pi * x1) * np.exp(-x1)
y2 = np.cos(2 * np.pi * x2)
ax = fig.add_subplot(2,1,1)
line1, = ax.plot(x1, y1, 'ko-') # so that we can update data later
ax.set_title('A tale of 2 subplots')
ax.set_ylabel('Damped oscillation')
ay = fig.add_subplot(2, 1, 2)
ay.plot(x2, y2, 'r.-')
ay.set_xlabel('time (s)')
ay.set_ylabel('Undamped')
for i in range(1000):
# update data
line1.set_ydata(np.cos(2 * np.pi * (x1+i*3.14/2) ) * np.exp(-x1) )
# redraw the canvas
fig.canvas.draw()
# convert canvas to image
img = np.fromstring(fig.canvas.tostring_rgb(), dtype=np.uint8, sep='')
img = img.reshape(fig.canvas.get_width_height()[::-1] + (3,))
# img is rgb, convert to opencv's default bgr
img = cv2.cvtColor(img,cv2.COLOR_RGB2BGR)
# display image with opencv or any operation you like
cv2.imshow("plot",img)
k = cv2.waitKey(33) & 0xFF
if k == 27:
break
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.