matlab如何批量读取图片并作分析

本人小白,自己编了个代码,能把一张图片二值化,然后读取图中黑色区域的像素点数,但我想实现批量读取,然后处理的目的,求大神帮忙

I=imread('top051.bmp');
Zmax=max(max(I));
Zmin=min(min(I));
TK=(Zmax+Zmin)/2;%初始阈值
flag=1;
[m,n]=size(I);
while(flag)
fg=0;
bg=0;
fgsum=0;
bgsum=0;
for i=1:m
for j=1:n
tmp=I(i,j);
if(tmp>=TK)
fg=fg+1;
fgsum=fgsum+double(tmp);
else
bg=bg+1;
bgsum=bgsum+double(tmp);
end
end
end
u1=fgsum/fg;
u2=bgsum/bg;
TKTmp=uint8((u1+u2)/2);
if(TKTmp==TK)
flag=0;
else
TK=TKTmp;
end
end
BCT = sum(newI (:)==0)
有可能的话,请好心朋友在这个基础上做些修改,已达到批量读取图片,并批量输出黑色区域像素点数的目的,在此谢过了,图片名称是由top001、top002、top003..........top452,这样的顺序编排的

% 你的代码没有仔细看,有问题在说吧,结果在R中

n = 452;
R = zeros(n,1);
for p = 1:n
    fn = ['000' num2str(p)];
    fn = fn(length(fn)-1:end);
    fn = ['top' fn '.bmp'];
    
    I=imread(fn);
    Zmax=max(max(I));
    Zmin=min(min(I));
    TK=(Zmax+Zmin)/2;%初始阈值
    flag=1;
    [m,n]=size(I);
    while(flag)
        fg=0;
        bg=0;
        fgsum=0;
        bgsum=0;
        for i=1:m
            for j=1:n
                tmp=I(i,j);
                if(tmp>=TK)
                    fg=fg+1;
                    fgsum=fgsum+double(tmp);
                else
                    bg=bg+1;
                    bgsum=bgsum+double(tmp);
                end
            end
        end
        u1=fgsum/fg;
        u2=bgsum/bg;
        TKTmp=uint8((u1+u2)/2);
        if(TKTmp==TK)
            flag=0;
        else
            TK=TKTmp;
        end
    end
    BCT = sum(newI (:)==0);
    R(p) = BCT;
end;

追问

运行完是这样,您能不能帮我调试一下,毕业论文急用啊,谢谢了。

追答n = 452;
R = zeros(n,1);
for p = 1:n
    fn = ['000' num2str(p)];
    fn = fn(length(fn)-1:end);
    fn = ['top' fn '.bmp'];     
    I = imread(fn);
    level = 0.5;
    BW = im2bw(I,0.5);
    L = BW==0;
    R = sum(L(:))
end;

追问

这个发的是什么意思?您能不能在我的那个基础上直接给我添加进去,我基本不会修改。。。见笑了

追答

%% 哦!好的。

n = 452;
R = zeros(n,1);
for p = 1:n
    fn = ['000' num2str(p)];
    fn = fn(length(fn)-1:end);
    fn = ['top' fn '.bmp'];     
    I = imread(fn); 
    I = rgb2gray(I);       % 转换为灰度图像
    Zmax = max(max(I));
    Zmin = min(min(I));
    TK = (Zmax+Zmin)/2;    % 初始阈值
    [m,n] = size(I);
    fg = 0;
    bg = 0;
    fgsum = 0;
    bgsum = 0;
    for i = 1:m
        for j = 1:n
            tmp = I(i,j);
            if(tmp >= TK)
                fg = fg+1;
                fgsum = fgsum+double(tmp);
            else
                bg = bg+1;
                bgsum = bgsum+double(tmp);
            end
        end
    end
    u1 = fgsum/fg;
    u2 = bgsum/bg;
    TKTmp = uint8((u1+u2)/2);
    L = I < TKTmp; % u1 为亮色;u2 为暗色。小于平均值可认为黑色
    R(p) = sum(L);
end;

温馨提示:内容为网友见解,仅供参考
第1个回答  2015-03-30
改成函数,输入参数就是图片的路径,然后按照你写的就行。

调用时,外面加上一层for循环。

另外dir可以读取当前路径下的所有文件名(即使改名字也是可以进行的)。追问

你方便在上面的基础上帮我修改下嘛?我实在小白,不会整,谢谢了

追答

function a=(pictureName)
I=imread(pictureName);
Zmax=max(max(I));
Zmin=min(min(I));
TK=(Zmax+Zmin)/2;%初始阈值
flag=1;
[m,n]=size(I);
while(flag)
fg=0;
bg=0;
fgsum=0;
bgsum=0;
for i=1:m
for j=1:n
tmp=I(i,j);
if(tmp>=TK)
fg=fg+1;
fgsum=fgsum+double(tmp);
else
bg=bg+1;
bgsum=bgsum+double(tmp);
end
end
end
u1=fgsum/fg;
u2=bgsum/bg;
TKTmp=uint8((u1+u2)/2);
if(TKTmp==TK)
flag=0;
else
TK=TKTmp;
end
end
BCT = sum(newI (:)==0)
end

怎么用MATLAB批量读取一个文件夹里面的图片 并进行处理呢?
1 图像按编号命名:1.jpg, 2.jpg,...,n.jpg 2 循环读图 I=cell(1,n);for i=1:n imageName=strcat(num2str(i),'.jpg');I{i} = imread(imageName);end 3 处理图像 --- 如果图像很多,那么最好这样,第二步和第三步合并 for i=1:n imageName=strcat(num2str(i),'.jpg');I = ...

如何用matlab批量读取图片?
1 图像按编号命名:1.jpg, 2.jpg,...,n.jpg 2 循环读图 I=cell(1,n);for i=1:n imageName=strcat(num2str(i),'.jpg');I{i} = imread(imageName);end 3 处理图像 --- 如果图像很多,那么最好这样,第二步和第三步合并 for i=1:n imageName=strcat(num2str(i),'.jpg');I ...

【求助!】matlab如何批量读写和处理图片
读取与处理的过程是这样的:% dir、struct 结构用法,还有sprintf 函数、简单流程控制listing = dir('d:\\d:\\pic\\*.jpg');for i = 1:N imgName = listing(i).name; imgData = imread(imgName); % 处理 b = rgb2gray(imgData); imgData = (b, graythresh(b)); % ...

matlab imread 怎么一次读取多张图片啊?
matlab的Imread不可以一次读取多张图片,因为每一张图片都是以矩阵的形式读入matlab的。每一张图片都需要用一个变量来保存。如果想批量读取图片可以使用循环设置变量,并导入,使用eval()执行。

matlab imread()批量读取图片
imname = dir('.\\*.bmp');%读入文件夹下的全部图像 im_num = length(imname);% 文件夹中图像的个数 im_temp = imread(imname(1).name,'bmp');%读入第一幅图像 [height,width] = size(im_temp);%得到图像的尺寸 DB(:,:,a) = zeros(height,width,im_num,'uint8');读入全部图像...

怎样用matlab读取一个文件夹下的多个子文件夹中的多个jpg图片,急用...
这样:imgPath = 'E:\/imageData\/'; % 图像库路径 imgDir = dir([imgPath '*.jpg']); % 遍历所有jpg格式文件 for i = 1:length(imgDir) % 遍历结构体就可以一一处理图片了 img = imread([imgPath imgDir(i).name]); %读取每张图片 end ...

求助各位大神,如何用matlab的M文件实现批量载入图片并转化为二值图像...
这只是批量读入图像从matlab论坛找的,把a.m文件直接放在附件1文件夹里直接运行,调试通过,转化为二值图像,我觉要用图像的字符识别,通过字符的结构进行度量,imname = dir('.\\*.bmp');im_num = length(imname);im_temp = imread(imname(1).name,'bmp');[height,width] = size(im_temp)...

matlab批量读取图片 要求不占很大内存,一张读完释放空间
我不知道你的图片怎么编码的,我反正是批量处理图片的时候都是命名为1.jpg,2.jpg...这样写的时候 for i=1:n s=num2str(i);I=imread(s+".jpg");...end 就可以。你 要求不占很大内存,一张读完释放空间,那么每一句imread后面你对图片操作完,后面跟一句clear I就可以 ...

MATLAB+PSYCHTOOLBOX示例(十三)——多图片读取及随机化
对于图片批量导入和随机化的具体实现,本文提供两种实用方法:其一,直接利用Psychtoolbox提供的工具,根据设定的参数生成所需刺激。其二,采用cell数组提前读取图片,实验时调用以实现高效管理。第一种方法虽有一定学习门槛,但通过本文的解释,读者能迅速掌握其应用。构建类似EPrime中List列表,将图片参数与文件...

matlab批量读取图片 要求不占很大内存,一张读完释放空间
我不知道你的图片怎么编码的,我反正是批量处理图片的时候都是命名为1.jpg,2.jpg...这样写的时候 for i=1:n s=num2str(i);I=imread(s+".jpg");...end 就可以。你 要求不占很大内存,一张读完释放空间,那么每一句imread后面你对图片操作完,后面跟一句clear I就可以 ...

相似回答