matlab图像处理问题

我想循环处理我在F盘trans里面的照片,现在有俩个程序,帮我把这两个程序连接起来,能运行出结果
close all
clear all
clc
I = imread('IMG_0146.JPG');

[Ix,Iy,Iz]=size(I);
if Ix>400&Iy>300
I=imresize(I,[400,Iy*400/Ix],'nearest');
end
figure
imshow(I)%输出图像
title('normal image')
I=double(I); %将I转换成double类型
[hue,s,v]=rgb2hsv(I); %将RGB格式转换成HSV格式
cb=0.148*I(:,:,1)-0.291*I(:,:,2)+0.439*I(:,:,3)+128;%将RGB转换为YCrCb格式
cr=0.439*I(:,:,1)-0.368*I(:,:,2)-0.071*I(:,:,3)+128;
[w h]=size(I(:,:,1)); %获取转化后的I图像
for i=1:w
for j=1:h
if 145<=cr(i,j)&cr(i,j)<=165&145<=cb(i,j)&cb(i,j)<=180&0.01<=hue(i,j)&hue(i,j)<=0.15
segment(i,j)=1;
else
segment(i,j)=0;
end
end
end
figure
imshow(segment);

skin=segment;
% 去除小像素联通区域
skin=bwareaopen(skin,round(w*h/900));
%dilating
se=strel('square',5);创建结构区域
skin=imdilate(skin,se); %膨胀作用
im(:,:,1)=I(:,:,1).*skin;
im(:,:,2)=I(:,:,2).*skin;
im(:,:,3)=I(:,:,3).*skin;
figure
imshow(uint8(im));
title('skin areas')
BW = skin;
L = bwlabel(BW,8);%
BB = regionprops(L, 'BoundingBox');%L等于几对应几
BB1=struct2cell(BB);%转换结构bb到bb1里
BB2=cell2mat(BB1);
figure,imshow(uint8(I));
title('result image');
[s1 s2]=size(BB2);
for k=3:4:s2-1
if (BB2(1,k)/BB2(1,k+1)) < 1.8 &&....
(BB2(1,k)/BB2(1,k+1)) > 0.4 &&....
(BB2(1,k)*BB2(1,k+1)) > 1000
hold on;
rectangle('Position',[BB2(1,k-2),BB2(1,k-1),BB2(1,k),BB2(1,k+1)],'EdgeColor','r' )%指定位置添加矩形
end
end

还有一个
mov = VideoReader('C:\Users\Administrator\Desktop\shipin.avi');
fnum = mov.NumberOfFrames;%
for i = 1:5:fnum
frame = read(mov, i);
imshow(frame);
imwrite(frame,strcat('F:\转换图片\',num2str(i),'.jpg'),'jpg');
end

应该是视频在前面,处理图像在后面吧?
你后面的那个是每隔5帧截取一张图片储存并以i命名。
想要连接起来其实比较简单的,就是在处理图片处加一个大的for循环就可以了。
把视频程序放前面。截图储存后再读取处理,这里要注意的是你每隔5帧截一个图片,是不是有点太频了?还有弄个短点的视频,5秒左右。这样不会太浪费计算机资源,如果太大了可能会蓝屏或者死机哦。
其实,连在一起很简单的。就这样;(我在我机子上运行了一次,储存地址改了,你自己改回来吧)
clc;clear all;close all;
mov = VideoReader('C:\Users\epwqe_000\Desktop\MatlabAsa\sssss.avi');%改地址
fnum = mov.NumberOfFrames;%
for i = 1:5:fnum
frame = read(mov, i);
imshow(frame);

imwrite(frame,strcat('C:\Users\epwqe_000\Desktop\MatlabAsa\New Folder\',num2str(i),'.jpg'),'jpg');%改地址

img=strcat(num2str(i),'.jpg');
I = imread(img);

[Ix,Iy,Iz]=size(I);
if Ix>400&Iy>300
I=imresize(I,[400,Iy*400/Ix],'nearest');
end
figure
imshow(I)%输出图像
title('normal image')
I=double(I); %将I转换成double类型
[hue,s,v]=rgb2hsv(I); %将RGB格式转换成HSV格式
cb=0.148*I(:,:,1)-0.291*I(:,:,2)+0.439*I(:,:,3)+128;%将RGB转换为YCrCb格式
cr=0.439*I(:,:,1)-0.368*I(:,:,2)-0.071*I(:,:,3)+128;
[w h]=size(I(:,:,1));%获取转化后的I图像

for i=1:w
for j=1:h
if 145<=cr(i,j)&cr(i,j)<=165&145<=cb(i,j)&cb(i,j)<=180&0.01<=hue(i,j)&hue(i,j)<=0.15
segment(i,j)=1;
else
segment(i,j)=0;
end
end
end
figure
imshow(segment);

skin=segment;
% 去除小像素联通区域
skin=bwareaopen(skin,round(w*h/900));
%dilating
se=strel('square',5);%创建结构区域
skin=imdilate(skin,se); %膨胀作用
im(:,:,1)=I(:,:,1).*skin;
im(:,:,2)=I(:,:,2).*skin;
im(:,:,3)=I(:,:,3).*skin;
figure
imshow(uint8(im));
title('skin areas')
BW = skin;
L = bwlabel(BW,8);%
BB = regionprops(L, 'BoundingBox');%L等于几对应几
BB1=struct2cell(BB);%转换结构bb到bb1里
BB2=cell2mat(BB1);
figure,imshow(uint8(I));
title('result image');

[s1 s2]=size(BB2);
for k=3:4:s2-1
if (BB2(1,k)/BB2(1,k+1)) < 1.8 &&....
(BB2(1,k)/BB2(1,k+1)) > 0.4 &&....
(BB2(1,k)*BB2(1,k+1)) > 1000
hold on;
rectangle('Position',[BB2(1,k-2),BB2(1,k-1),BB2(1,k),BB2(1,k+1)],'EdgeColor','r' )%指定位置添加矩形
end
end
end
温馨提示:内容为网友见解,仅供参考
第1个回答  2014-03-14
前提:把图像的名字都命名为“1.jpg”的形式,依次往后,然后把程序中的路径改对,然后才可以允许下面的程序(已测试,可以运行)。
fnum=8;%相片数量
for i = 1:fnum
picname=strcat('C:/Users/printer/Desktop/tes/',num2str(i),'.jpg');
I = imread(picname);
figure;imshow(I);

[Ix,Iy,Iz]=size(I);
if Ix>400&Iy>300
I=imresize(I,[400,Iy*400/Ix],'nearest');
end
figure
imshow(I)%输出图像
title('normal image')
I=double(I); %将I转换成double类型
[hue,s,v]=rgb2hsv(I); %将RGB格式转换成HSV格式
cb=0.148*I(:,:,1)-0.291*I(:,:,2)+0.439*I(:,:,3)+128;%将RGB转换为YCrCb格式
cr=0.439*I(:,:,1)-0.368*I(:,:,2)-0.071*I(:,:,3)+128;
[w h]=size(I(:,:,1)); %获取转化后的I图像
for i=1:w
for j=1:h
if 145<=cr(i,j)&cr(i,j)<=165&145<=cb(i,j)&cb(i,j)<=180&0.01<=hue(i,j)&hue(i,j)<=0.15
segment(i,j)=1;
else
segment(i,j)=0;
end
end
end
figure
imshow(segment);

skin=segment;
% 去除小像素联通区域
skin=bwareaopen(skin,round(w*h/900));
%dilating
se=strel('square',5);%创建结构区域
skin=imdilate(skin,se); %膨胀作用
im(:,:,1)=I(:,:,1).*skin;
im(:,:,2)=I(:,:,2).*skin;
im(:,:,3)=I(:,:,3).*skin;
figure
imshow(uint8(im));
title('skin areas')
BW = skin;
L = bwlabel(BW,8);%
BB = regionprops(L, 'BoundingBox');%L等于几对应几
BB1=struct2cell(BB);%转换结构bb到bb1里
BB2=cell2mat(BB1);
figure,imshow(uint8(I));
title('result image');
[s1 s2]=size(BB2);
for k=3:4:s2-1
if (BB2(1,k)/BB2(1,k+1)) < 1.8 &&....
(BB2(1,k)/BB2(1,k+1)) > 0.4 &&....
(BB2(1,k)*BB2(1,k+1)) > 1000
hold on;
rectangle('Position',[BB2(1,k-2),BB2(1,k-1),BB2(1,k),BB2(1,k+1)],'EdgeColor','r' )%指定位置添加矩形
end
end
close;
end
相似回答