将python中显示的图像转换为OpenCV图像。

将python中显示的图像转换为OpenCV图像。,python,image,opencv,plot,avi,Python,Image,Opencv,Plot,Avi,因此,我想简单地获取我通过plt.plot(x,y)制作的现有绘图,将其转换为“图像”,然后我可以通过以下方式将其交给OpenCV的视频编写器: cv2.VideoWriter('myMovie.avi', fourcc, 20.0, (640,480)) writer.write(image) 我的问题是,考虑到我已经绘制的图形,如何获得“图像” 谢谢。在发布解决方案之前,如果只使用保存视频,可能会更容易。下面是使用opencv的解决方案: import numpy as np import

因此,我想简单地获取我通过
plt.plot(x,y)
制作的现有绘图,将其转换为“图像”,然后我可以通过以下方式将其交给OpenCV的视频编写器:

cv2.VideoWriter('myMovie.avi', fourcc, 20.0, (640,480))
writer.write(image)
我的问题是,考虑到我已经绘制的图形,如何获得“图像”


谢谢。

在发布解决方案之前,如果只使用保存视频,可能会更容易。下面是使用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

首先将figure转换为
numpy.array
怎么样?@QuangHoang所以我使用fig,ax=plt.subplot(1);ax.plot(…)。你能举个例子作为回答吗?我可以接受。谢谢。这个问题可以用一个例子来改进。谢谢,这很有帮助。可以用
cv2.cvtColor(np.asarray(figure.canvas.buffer_rgba()),cv2.COLOR_RGBA2BGR)
来替换画布到图像的转换,至少对于
TkAgg
matplotlib后端来说,这样可以大大提高速度。我可以想象其他后端使用其他颜色空间。我在这里添加这个是因为这是我在google上找到的将matplotlib图像转换为openCV图像的结果。