如何获取图像尺寸并将其作为变量?Matlab代码求助
获取Matlab图像尺寸并用于变量定义
嘿,我来帮你搞定这个问题!你已经用dir拿到了文件夹里的PNG文件列表,接下来要获取图像尺寸并把它作为变量来创建矩阵对吧?这其实很简单,咱们一步步来:
首先,dir函数只能拿到文件的基本信息(文件名、大小这些),不会包含图像的尺寸数据,所以咱们得先读取至少一张图像来获取尺寸。假设你文件夹里的所有图像尺寸都一样(这也是你想创建统一大小矩阵的前提),那咱们可以先读第一张图:
% 先把文件夹路径单独拎出来,方便后续拼接 imageFolder = 'C:\example\Desktop\imagefolder'; a = dir(fullfile(imageFolder, '*.png')); numberofImages = length(a); % 读取第一张图像获取尺寸 firstImagePath = fullfile(a(1).folder, a(1).name); % 用fullfile拼接完整路径,避免路径分隔符问题 firstImage = imread(firstImagePath); imgSize = size(firstImage); % 得到的是 [高度, 宽度, 通道数],灰度图的话就是 [高度, 宽度] sizeofimage = numel(firstImage); % 计算图像的总元素数,这就是你需要的sizeofimage变量
接下来就可以用这个sizeofimage来创建你要的矩阵了,甚至可以把所有图像展平后存进去:
% 创建存储图像的矩阵,每一行对应一个展平后的图像 matrix = zeros(numberofImages, sizeofimage); % 遍历所有图像,把它们展平后存入矩阵 for i = 1:numberofImages currentImage = imread(fullfile(a(i).folder, a(i).name)); matrix(i, :) = currentImage(:); % 把图像展平成一维向量,存入矩阵的第i行 end
这里有几个关键点要注意:
- 用
fullfile拼接路径是个好习惯,它会自动适配不同系统的路径分隔符(Windows的\和Linux的/),让代码更通用。 size()函数给你的是图像的维度信息,而numel()直接返回图像的总像素/元素个数,正好对应你需要的sizeofimage,用来定义矩阵的列数。- 如果你的图像是RGB彩色图,
numel()会把三个通道的像素都算进去(比如100×100的RGB图,总元素数是30000),矩阵的每一行就对应这30000个像素值。 - 要是文件夹里的图像尺寸不一样,那上面创建统一矩阵的方法就不行了——这时候你要么先把所有图像resize到同一个尺寸,要么改用cell数组来存储不同大小的图像(比如
matrix = cell(numberofImages, 1);,然后每个cell存原尺寸的图像)。
内容的提问来源于stack exchange,提问作者Oscar Dolloway
相关产品推荐
相关产品推荐

