本文共 3436 字,大约阅读时间需要 11 分钟。
很多程序员在日常开发过程中需要处理图片和视频的保存操作,Python的imageio库提供了一个强大的工具链,以高效处理这一需求。特别是mimsave函数,能够将一系列图片文件转化为动态图像,如GIF或视频文件。本文将介绍多个实用的代码示例,展示如何利用imageio.mimsave进行高效的图片与视频文件的保存。
import imageio as iodef save_movie(images, num_x, num_y, out_file=None, movie_id=0): if out_file is None: print('`out_file`未提供,文件将不被保存。') else: images_ = [] for image in images: if 'quantized' in _options: image = dequantize(image) dim_c, dim_x, dim_y = image.shape[-3:] image = image.reshape((num_x, num_y, dim_c, dim_x, dim_y)) image = image.transpose(0, 3, 1, 4, 2) image = image.reshape(num_x * dim_x, num_y * dim_y, dim_c) if 'use_tanh' in _options: image = 0.5 * (image + 1) images_.append(image) io.mimsave(out_file, images_) visualizer.video(videofile=out_file, env=exp.NAME, win='movie_{}'.format(movie_id))
这个函数接收一组图片文件,根据指定的维度重定尺寸后保存为目标文件。例如,可以用这个函数快速生成视频文件。
import imageio as iofrom PIL import Imagedef create_gif(pgn, gif_path, duration): board_image = initial_board.copy() images = [array(board_image)] game = chess.ChessGame() moves = chess.get_moves_from_pgn(pgn) for move in moves: previous = game.state.copy() game.push(move) apply_move(board_image, game.state, previous) images.append(array(board_image)) last = images[-1] for i in range(3): images.append(last) io.mimsave(gif_path, images, duration=duration)
这个代码示例生成一个动态GIF文件,适用于显示国际象棋棋局的变化。通过指定duration参数,可以控制每个帧的显示时间。
def train(self, data_loader, epochs, save_training_gif=True): if save_training_gif: fixed_latents = Variable(self.G.sample_latent(64)) if self.use_cuda: fixed_latents = fixed_latents.cuda() training_progress_images = [] for epoch in range(epochs): print(f"Epoch {epoch + 1}") self._train_epoch(data_loader) if save_training_gif: img_grid = make_grid(self.G(fixed_latents).cpu().data) img_grid = np.transpose(img_grid.numpy(), (1, 2, 0)) training_progress_images.append(img_grid) if save_training_gif: io.mimsave(os.path.join('./', f'training_{epochs}epochs.gif'), training_progress_images)
这个函数用于保存训练过程中生成的图片,便于后续分析和展示。通过将训练中生成的图片保存下来,能够直观看到模型训练的效果变化。
import imageio as iodef generate_gif(self, filenames, gif_filename): '''创建一个动态GIF文件''' images = [] for filename in filenames: if os.path.exists(filename): images.append(io.imread(filename)) io.mimsave(gif_filename, images)
这个函数接受一组图片文件路径,生成与文件名同名的GIF文件。适用于需要一次性生成动态图像的场景。
import imageio as iodef create_gif(scene, file_name, n_frames=60, size=(600, 600)): tdir = tempfile.gettempdir() window.record(scene, az_ang=360.0 / n_frames, n_frames=n_frames, path_numbering=True, out_path=tdir + '/tgif', size=size) angles = [] for i in range(n_frames): if i < 10: angle_fname = f"tgif00000{i}.png" elif i < 100: angle_fname = f"tgif0000{i}.png" else: angle_fname = f"tgif000{i}.png" angles.append(io.imread(os.path.join(tdir, angle_fname))) io.mimsave(file_name, angles)
这个代码示例生成一个基于多帧图像的GIF文件,适用于3D场景的动态捕获与展示。
以上代码示例展示了在不同场景中imageio.mimsave的实际应用,开发者可以根据自己的需求选择合适的函数参数进行文件保存。这些建议和工具将极大地提升你的开发效率。
转载地址:http://vvklz.baihongyu.com/