Python中计算图像列表均值后保留3D网格及转1D列表的问题
问题解决:保留均值计算后的3D结构并转为1D列表
图像加载代码
import cv2 import numpy as np from matplotlib.image import imread import matplotlib.pyplot as plt from skimage import color import os, subprocess, glob, re from PIL import Image import glob import numpy
数据加载与灰度转换
执行以下代码后,得到形状为11x480x600的灰度图像数组:
list_images = [] for img in glob.glob('../proj/*.jpg'): ims = cv2.imread(os.path.join(img)) list_images.append(ims) im_arr = numpy.array(list_images) im_gry = color.rgb2gray(im_arr)
原问题描述
- 计算所有图像均值时,
m_df = im_gry.mean(axis=0)返回的是480x600的2D数组,需要保留为1x480x600的3D结构 - 后续转1D列表的代码因
m_df缺少第2维度报错:
image_shape=m_df[0].shape frames_reshaped = m_df.reshape([ m_df.shape[0]* m_df.shape[1],m_df.shape[2]]) frames_reshaped.shape
解决步骤
1. 保留均值计算后的3D结构
有两种实现方式:
方式一:计算均值时直接保留维度
用keepdims=True参数让结果维持3D形状:m_df = im_gry.mean(axis=0, keepdims=True) # 此时m_df.shape为(1, 480, 600)方式二:给已有的2D数组添加维度
若已得到2D的m_df,用np.expand_dims插入第0维度:m_df = np.expand_dims(m_df, axis=0) # 转换后shape同样为(1, 480, 600)
2. 转为1D列表
得到3D结构的m_df后,可通过两种方式转成1D列表:
方式一:使用flatten方法
frames_reshaped = m_df.flatten().tolist()方式二:使用reshape方法
贴合原有代码逻辑调整维度计算:frames_reshaped = m_df.reshape(m_df.shape[0] * m_df.shape[1] * m_df.shape[2]).tolist()
内容的提问来源于stack exchange,提问作者user20003920
相关产品推荐
相关产品推荐

