毕业设计matlab编程

将视频截取成帧

fileName = 'q.avi'; %此处输入视频名称,要带后缀,注意好像只有wmv和avi格式

obj = VideoReader(fileName);

numFrames = obj.NumberOfFrames;% 帧的总数

 for k = 1 :numFrames% 读取数据

     frame = read(obj,k);

     imshow(frame);

   imwrite(frame,strcat(num2str(k),'.jpg'),'jpg');% 保存帧

End

灰度二值化图像

for i=1:numberofframe%numberofframe为图像张数

    imageName=strcat(num2str(i),'.jpg');

    I = imread(imageName);

    imggray = rgb2gray(I);%灰度化图像

    imwrite(imggray,strcat(num2str(i),'huidu.jpg'),'jpg');% 保存帧

    i2=im2bw(I);% i2是二值图像,不需要求阈值

    imwrite(i2,strcat(num2str(i),'erzhi.jpg'),'jpg');% 保存帧

end

背景差分法

    filename = '103.jpg';%读原图

    I = imread(filename);

    X = rgb2gray(I);%读,灰度原图

    filename = 'YCBJ.jpg';%读取背景图

    M = imread(filename);

    Y = rgb2gray(M);%读,灰度背景图

    Z = imabsdiff(X,Y);%两图相减

    level = graythresh(Z);

    Z = im2bw(Z,level);%二值化图

    %   膨胀腐蚀算子,相当于闭操作

    se = strel('disk',2);

    Q=imerode(Z,se);%腐蚀

    Q=imdilate(Q,se);%膨胀

    lab1='原图';

    lab2='背景';

    lab3='差分二值化后';

    lab4='腐蚀膨胀后';

    subplot(221);imshow(I);title(lab1);

    subplot(222);imshow(M);title(lab2);

    subplot(223);imshow(Z);title(lab3);

subplot(224);imshow(Q);title(lab4);

三帧差分法

    filename1='110.jpg';%读取前一帧

    I1 = imread(filename1);

    O = rgb2gray(I1);%读,灰度前一帧

     filename2='115.jpg';%读取中间帧图像

    I2 = imread(filename2);

    P = rgb2gray(I2);%读,灰度当前帧

    filename3='120.jpg';%读取后一帧图像

    I3 = imread(filename3);

    Q = rgb2gray(I3);%读,灰度后一帧

   A = imabsdiff(P,O);

   level1 = graythresh(A);

    A = im2bw(A,level1);%二值化前两帧差图

   subplot(131);imshow(A);

    B = imabsdiff(Q,P);

   level = graythresh(B);

    B = im2bw(B,level);%二值化后两帧差图

   

    subplot(132);imshow(B);

 for i=1:480

        for j=1:720

              C(i,j)=A(i,j)*B(i,j);

       end

 end

 subplot(133);imshow(C);%二AB两图相与

帧差分循环读写

    for i=1:numberofframe%numberofframe为帧数

    filename=strcat(num2str(i),'.jpg');

    I = imread(filename);

    X = rgb2gray(I);%读,灰度原图

    filename = 'YCBJ.jpg';

    M = imread(filename);

    Y = rgb2gray(M);%读,灰度背景图

    Z = imsubtract(Y,X);%两图相减

    level = graythresh(Z);

    Z = im2bw(Z,level);%二值化图

    %   膨胀腐蚀算子,相当于闭操作

    se = strel('disk',3);

    Z=imerode(Z,se);%腐蚀

    Z=imdilate(Z,se);%膨胀

   imwrite(Z,strcat(num2str(i),'Chafenghou.jpg'),'jpg');% 保存帧

    end  

掩模处理

D = imread('zhan.jpg');

      %掩模处理  

       for j=1:720

        for i=1:480

                if(j<-2.39*i+765)

                    D(i,j)=0;

                end

                if(j>0.8*i+460)

                    D(i,j)=0;

                end

                if(i<140)

                    D(i,j)=0;

                end

        end

        end

图像对称翻转

AA=imread('b.jpg');%文件名是你自己的哦

for k=1:3

B(:,:,k)=fliplr(AA(:,:,k));%左右翻转

end

imwrite(B,'obj.jpg','jpg');% 保存帧

简单的判断摔倒

BJ=imread('YCBJ.jpg');%   读取有物体彩色图片

fileName = '6.avi';

obj = VideoReader(fileName);

numFrames = obj.NumberOfFrames;% 帧的总数

for k = 1 :numFrames% 读取数据     

T = read(obj,k);

A=imsubtract(BJ,T);

level = graythresh(A);

B = im2bw(A,level);%二值

 for j=1:720

        for i=1:480

                if(j<-2.39*i+765)

                    B(i,j)=0;

                end

                if(j>0.8*i+460)

                     B(i,j)=0;

                end

                if(i<140)

                     B(i,j)=0;

                end

                

        end 

 end   

 %  imwrite(B,strcat(num2str(k),'.jpg'),'jpg');% 保存帧

 figure(1);

 imshow(B);

[bwl,ln]=bwlabel(B,8);

STATS=regionprops(bwl,'Area');

a=0;

for n=1:ln

 if(STATS(n).Area>500)

     abc=(bwl==n);

    [c,r]=find(abc==1);

    a=a+1;

                xbegin=min(r);

                ybegin=min(c);

                xlength=max(r)-xbegin;

                ylength=max(c)-ybegin;

                p=ylength/xlength;

          if(p<=1)

           hold on

           rectangle('Position',[xbegin,ybegin,xlength,ylength],'EdgeColor','R','linewidth',3);

           hold off

          end

 end

  end   

end

 改善后的判断摔倒

BJ=imread('YCBJ.jpg');%   读取有物体彩色图片

fileName = '13.wmv';

obj = VideoReader(fileName);

numFrames = obj.NumberOfFrames;% 帧的总数

H=zeros(1,1);

S=zeros(1,1);

for k = 1:numFrames% 读取数据     

T = read(obj,k);

A=imsubtract(BJ,T);

level = graythresh(A);

B = im2bw(A,level);%二值

 for j=1:720

        for i=1:480

                if(j<-2.39*i+765)

                    B(i,j)=0;

                end

                if(j>0.8*i+460)

                     B(i,j)=0;

                end

                if(i<140)

                     B(i,j)=0;

                end

        end 

 end   

 %  imwrite(B,strcat(num2str(k),'.jpg'),'jpg');% 保存帧

 figure(1);

 imshow(T);

[bwl,ln]=bwlabel(B,8);

STATS=regionprops(bwl,'Area');

a=0;

for n=1:ln

 if(STATS(n).Area>50)

     abc=(bwl==n);

    [c,r]=find(abc==1);

                xbegin=min(r);

                ybegin=min(c);

                xlength=max(r)-xbegin;

                ylength=max(c)-ybegin;

                p=ylength/xlength;

              

          if(p<=1)

                 x=max(c);

       y = 39.916*x-10881;

             y1=y*0.8566;

            y2=y*1.1434;

             if(STATS(n).Area<y2&&STATS(n).Area>y1)

                 a=a+1;

               

                H(k,a)=max(c);

           S(k,a)=STATS(n).Area;

           hold on

           rectangle('Position',[xbegin,ybegin,xlength,ylength],'EdgeColor','R','linewidth',3);

           hold off

         end

   end

  end 

end

End

将目标区域值存入矩阵数据分析

BJ=imread('YCBJ.jpg');%   读取有物体彩色图片

fileName = '1.avi';

obj = VideoReader(fileName);

numFrames = obj.NumberOfFrames;% 帧的总数

H=zeros(1,1);

S=zeros(1,1);

for k = 1:numFrames% 读取数据     

T = read(obj,k);

A=imsubtract(BJ,T);

level = graythresh(A);

B = im2bw(A,level);%二值

 imshow(B);

%  imwrite(B,strcat(num2str(k),'.jpg'),'jpg');% 保存帧

[bwl,ln]=bwlabel(B,8);

STATS=regionprops(bwl,'Area');

a=0;

for n=1:ln

     if(STATS(n).Area>400)

     abc=(bwl==n);

    [c,r]=find(abc==1);

    a=a+1;

                H(k,a)=max(c);%将联通区域底部坐标放到矩阵H中

           S(k,a)=STATS(n).Area;%将联通区域面积坐标放到矩阵S中

     end

end

   end  

   

  

   

   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值