怎么用MATLAB处理一批图片
我有一批文件编号是000.bmp001.bmp。。。。依次类推急求个MATLAB代码批量调用这批图片并进行边缘检测。。。。然后批量保存。。。。求~~~~~~~...
我有一批文件编号是000.bmp 001.bmp。。。。依次类推 急求个MATLAB代码 批量调用这批图片 并进行边缘检测 。。。。然后批量保存。。。。求~~~~~~~
展开
4个回答
2015-08-05
展开全部
有两个方法:一个是将的图像统一进行一次重命名如:1.jpg,2.jpg等,然后利用for循环依次进行处理即可,如下面的语句:假设的图像共有20副:
str='D:\做差\好的图像\'; %的图像放在D盘,做差文件夹下,好的图像文件夹下
for i=1:20
I=imread([str,num2str(i),'.bmp']); %依次读取每一幅图像
%在此处进行的图像处理即可
end
方法二:
将图像统一方法一个文件夹下,不需要统一进行重命名了,利用uigetdir函数得到所处理图像的路径,然后对此路径下的所有图像进行处理,举例如下:只处理bmp文件;
srcDir=uigetdir('Choose source directory.'); %获得选择的文件夹
cd(srcDir);
allnames=struct2cell(dir('*.bmp')); %只处理8位的bmp文件
[k,len]=size(allnames); %获得bmp文件的个数
for ii=1:len
%逐次取出文件
name=allnames{1,ii};
I=imread(name); %读取文件
%然后在此处添加的图像处理程序即可
end
str='D:\做差\好的图像\'; %的图像放在D盘,做差文件夹下,好的图像文件夹下
for i=1:20
I=imread([str,num2str(i),'.bmp']); %依次读取每一幅图像
%在此处进行的图像处理即可
end
方法二:
将图像统一方法一个文件夹下,不需要统一进行重命名了,利用uigetdir函数得到所处理图像的路径,然后对此路径下的所有图像进行处理,举例如下:只处理bmp文件;
srcDir=uigetdir('Choose source directory.'); %获得选择的文件夹
cd(srcDir);
allnames=struct2cell(dir('*.bmp')); %只处理8位的bmp文件
[k,len]=size(allnames); %获得bmp文件的个数
for ii=1:len
%逐次取出文件
name=allnames{1,ii};
I=imread(name); %读取文件
%然后在此处添加的图像处理程序即可
end
展开全部
I = cell(111, 1); J = I;
for k = 0:110
str = sprintf('%03i.bmp', k);
tmp = imread(str);
I{k} = tmp;
if ndims(tmp)==3, tmp=rgb2gray(tmp); end
tmp = edge(tmp,'canny');
J{k} = tmp;
end
现在所有原始图片都存在cell矩阵I中。边缘检测后的图都存在J中。
for k = 0:110
str = sprintf('%03i.bmp', k);
tmp = imread(str);
I{k} = tmp;
if ndims(tmp)==3, tmp=rgb2gray(tmp); end
tmp = edge(tmp,'canny');
J{k} = tmp;
end
现在所有原始图片都存在cell矩阵I中。边缘检测后的图都存在J中。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这只是批量读入图像从matlab论坛找的,把a.m文件直接放在附件1文件夹里直接运行,调试通过
我觉得要用图像的字符识别,通过字符的结构进行度量
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');
% 读入全部图像
for a = 1:length(imname)
DB(:,:,a) = imread(imname(a).name,'bmp');%读取图像数据
end
批量读入图片
用cat函数连接;
每个纸条的边界
ima = DB(:,:,a);
im_left = ima(:,1);
im_right= ima(:,end);
灰度值就是0 255,你要二值化数也行用 im2bw
请采纳我的答案!
我的代码是调试通过的
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
clear;clc
for n=0:12
A=imread(sprintf('%.3d.bmp',n));
if ndims(A)==3
A=rgb2gray(A);
end
A=edge(A,'canny');
imwrite(A,sprintf('edge%.3d.bmp',n));
end
for n=0:12
A=imread(sprintf('%.3d.bmp',n));
if ndims(A)==3
A=rgb2gray(A);
end
A=edge(A,'canny');
imwrite(A,sprintf('edge%.3d.bmp',n));
end
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询