python – 实时将cv2.imshow()与matplotlib plt.show()结合使用
发布时间:2020-12-20 11:59:04 所属栏目:Python 来源:网络整理
导读:我正在尝试使用openCV组合来自网络摄像头的提要,然后使用matplotlib更新图表. 获取和显示框架的基本示例如下: import cv2cap = cv2.VideoCapture(0)while(True): # Capture frame-by-frame ret,frame = cap.read() # Display the resulting frame cv2.imsho
我正在尝试使用openCV组合来自网络摄像头的提要,然后使用matplotlib更新图表.
获取和显示框架的基本示例如下: import cv2 cap = cv2.VideoCapture(0) while(True): # Capture frame-by-frame ret,frame = cap.read() # Display the resulting frame cv2.imshow('frame',frame) # When to exit loop - terminate program if cv2.waitKey(1) & 0xFF == ord('q'): break # When everything done,release the capture cap.release() cv2.destroyAllWindows() 使用matplotlib连续更新图形(随机绘图)的示例: import numpy as np import matplotlib.pyplot as plt x = [0,1,2,3,4,5,6,7,8,9] y = [0,0] # x goes from 0-9 numbers # y goes from 0-100% fig = plt.figure() ax = plt.axes(xlim=(0,9),ylim=(0,100)) # line,= ax.plot([],[],lw=2) rects = plt.bar(x,y,color='b') def animate(i): y = random.sample(xrange(100),10) for rect,yi in zip(rects,y): rect.set_height(yi) return rects anim = animation.FuncAnimation(fig,animate,frames=200,interval=20,blit=True) plt.show() 所以我想要的是将两者结合在一起.应该通过传递我从帧中获得的结果来更新图表.我面临的主要问题是让两个窗口同时并排更新. plt.show()似乎阻止了其他一切. 有关如何解决的任何想法? 干杯 解决方法
这是一个将plt.figure()转换为np.array并使用cv2.imshow将其显示在相机Feed中的示例
import matplotlib matplotlib.use('TkAgg') import numpy as np import cv2 import matplotlib.pyplot as plt fig = plt.figure() cap = cv2.VideoCapture(0) 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) line1,= plt.plot(x1,y1,'ko-') # so that we can update data later 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) # display camera feed ret,frame = cap.read() cv2.imshow("cam",frame) k = cv2.waitKey(33) & 0xFF if k == 27: break (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |