加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读