Yas*_*ash 7 python opencv matplotlib
我有这个简单的python脚本使用OpenCV从文件夹加载图像并在循环中显示它们.我想用这个效果重现这个效果matplotlib.
import cv2 as cv
import os
im_files = [for f in os.listdir('.') if f[-3:] == 'png']
for f in im_files:
im = cv.imread(f, 0) #read image in greyscale
cv.imshow('display', im)
cv.waitKey(1)
cv.destroyAllWindows()
Run Code Online (Sandbox Code Playgroud)
我尝试了以下脚本,但打开以显示图表的pyplot窗口变得无法响应.
import pylab as pl
import os
files = [f for f in os.listdir('.') if f[-3:] == 'png']
pl.ion()
for f in files:
im=pl.imread(f)
pl.imshow(im)
pl.draw()
Run Code Online (Sandbox Code Playgroud)
我google了很多但找不到任何解决方案.我该怎么做呢?我在Windows 8上使用Anaconda 1.6 32bit.
tac*_*ell 22
img = None
for f in files:
im=pl.imread(f)
if img is None:
img = pl.imshow(im)
else:
img.set_data(im)
pl.pause(.1)
pl.draw()
Run Code Online (Sandbox Code Playgroud)
小智 6
我喜欢下面的方法,这种方法非常简单,并且允许更新整个图形,包括标题、标签等,而不仅仅是图像。
import numpy as np
from matplotlib import pyplot as plt
for j in range(0,3):
img = np.random.normal(size=(100,150))
plt.figure(1); plt.clf()
plt.imshow(img)
plt.title('Number ' + str(j))
plt.pause(3)
Run Code Online (Sandbox Code Playgroud)
形成随机图像。
plt.figure如果图形尚不存在,则在第一轮创建该图形,然后将图形 1 设为当前图形。
plt.clf清除数字,以便后续更新不会相互重叠。然后显示图像并带有标题。
该plt.pause语句是关键,因为这会导致显示更新 - 包括标题、标签等。
我已经实现了一个基于 matplotlib 的方便脚本,它正好满足您的需求等等。在这里检查一下
在您的情况下,以下代码片段应该有效:
import os
from scipy.misc import imread
img_files = [for f in os.listdir('.') if f[-3:] == 'png']
# redraw_fn draw frame f in a image sequence
def redraw_fn(f, axes):
img_file = img_files[f]
img = imread(img_file)
if not redraw_fn.initialized:
redraw_fn.im = axes.imshow(img, animated=True)
redraw_fn.initialized = True
else:
redraw_fn.im.set_array(img)
redraw_fn.initialized = False
videofig(len(img_files), redraw_fn, play_fps=30)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
23537 次 |
| 最近记录: |