%----------读取视频中裂隙的面积、周长、宽度、长度--------------------------
clear all;
str='yasuo.avi';%读取视频
ro=VideoReader(str);
num=ro.NumberOfFrames;%获取视频帧数num=830
for i=250:265;
Q1=rgb2gray(read(ro,[i,i]));%读取第一帧图像并转化为灰度图像
Q1=imrotate(Q1,90); %横向视频别忘记旋转
Rect=[97.5100 181.5100 273.9800 539.9800]; %截取要研究的区域
Q5=imcrop(Q1,Rect); %截取对应区域
BW1=im2bw(Q5,0/255); %原灰度图的二值化(灰度值>裂缝的部分)
BW2=im2bw(Q5,45/255); %原灰度图的二值化(灰度值>黑云母的部分)
BW41=imsubtract(BW1,BW2); %提取黑云母部分
%对黑云母区域进行数学形态学处理
%BW42=edge(BW41,'canny');
%BW42=bwareaopen(BW42,20);
%BW42=imclose(BW42,strel('disk',1));
%BW42=edge(BW42,'canny');
%imshow(~BW42);
L1=bwlabel(BW41);%标记黑云母区域
E=regionprops(L1,'all');%得到区域描绘参数
e=[E.Area];%求面积
N(i-249)=sum(e);%i-72
e1=[E.Perimeter]; s(i-249)=sum(e1);%求周长,i-初始帧数
%s(i,1)=length(find(bwperim(BW42,4)==1));%求裂隙周长
STATS=regionprops(L1,'BoundingBox');%求裂隙宽和长
imshow(~BW41);hold on;
for j = 1:size(STATS,1)
rectangle('Position',STATS(j).BoundingBox,'EdgeColor','g');
k(j)=STATS(j).BoundingBox(3);
c(j)=STATS(j).BoundingBox(4);
end
kuan(i-249)=sum(k);%求多个捕捉区域的宽度和
chang(i-249)=sum(c); %求多个捕捉区域的宽度和
end
xlswrite('裂隙特征参数1.xls',N','sheet1','A2'); %裂隙面积
xlswrite('裂隙周长1.xlsx',s','sheet1','A2'); %裂隙周长
%xlswrite('裂隙特征参数.xls',kuan','sheet2','A2'); %裂隙宽
%xlswrite('裂隙特征参数.xls',chang','sheet2','B2'); %裂隙长
评论1