%fileName='D:\workspace\Matlab workspace\数字图像处理\char2\char2_test\jmucorridor.avi';
fileName='D:\workspace\Matlab workspace\数字图像处理\char2\char2_test\Sample4.mp4';
obj=VideoReader(fileName);
numFrames=obj.NumberOfFrames;
f=read(obj,300);
a=0.01;
for i=10:300
frame=read(obj,i);
b=frame;
b=(1-a)*b+a*f;
o=frame-f;
ogray=f-b;
%
%
%%
img = ogray;
% get binary image
gray_img = rgb2gray(img);
T = graythresh(gray_img);
bw_img = im2bw(gray_img, T);
bw_img=medfilt2(bw_img,[9,9]);
% find the largest connected region
img_reg = regionprops(bw_img, 'area', 'boundingbox');
areas = [img_reg.Area];
rects = cat(1, img_reg.BoundingBox);
% show all the largest connected region
figure(1),
imshow(frame);
for i = 1:size(rects, 1)
if( rects(i,3)>20||rects(i,4)>20)
rectangle('position', rects(i, :), 'EdgeColor', 'r');
end
end
%%
% g=o;
% dd1=(g(:,:,1)<=255&g(:,:,1)>=240&g(:,:,2)<=230&g(:,:,2)>=205&g(:,:,3)<=45&g(:,:,3)>=30);
% %由RGB颜色范围抠图 结果为逻辑矩阵(只包含0与1)
% [m,n]=size(dd1);
% z=zeros(m,n);
% image(cat(3,dd1,z,z))
%%
x=imread('2.jpg');%读取彩图
[m,n,d]=size(x);
y=uint8(x);%转为uint8数据类型,计算图像像素
level=0;%设置阈值
%提取红分量,不满足阈值的变为白色
for i=1:m
for j=1:n
if((x(i,j,1)-x(i,j,2)>level)&&(x(i,j,1)-x(i,j,3)>level))
y(i,j,1)=x(i,j,1);
y(i,j,2)=x(i,j,2);
y(i,j,3)=x(i,j,3);
else
b(i,j,1)=255;
y(i,j,2)=255;
y(i,j,3)=255;
end
end
end
% subplot(2,2,2);imshow(y);title('提取红分量后');%显示提取红分量后的图
sum1=sum(sum(y(:,:,1)));
%%
x1=o;
[m,n,d]=size(x1);
y1=uint8(x1);%转为uint8数据类型,计算图像像素
% imshow(y1);
level=0;%设置阈值
% figure(5);
% subplot(2,2,1);imshow(x1);title('原图');%显示原图
%提取红分量,不满足阈值的变为白色
for i=1:m
for j=1:n
if((x1(i,j,1)-x1(i,j,2)>level)&&(x1(i,j,1)-x1(i,j,3)>level))
y1(i,j,1)=x1(i,j,1);
y1(i,j,2)=x1(i,j,2);
y1(i,j,3)=x1(i,j,3);
else b(i,j,1)=255;
y1(i,j,2)=255;
y1(i,j,3)=255;
end
end
end
%subplot(2,2,2);imshow(y1);title('提取红分量后');%显示提取红分量后的图
sum11=sum(sum(y1(:,:,1)));
flag=0;
if(sum11>0.5*sum1)
flag=1;
end
figure(3);
if(flag==1)
imshow(o);
for i = 1:size(rects, 1)
if( rects(i,3)>30||rects(i,4)>30)
rectangle('position', rects(i, :), 'EdgeColor', 'r');
end
end
end
end
subplot(2,2,1),imshow(f);
subplot(2,2,2),imshow(b);
subplot(2,2,3),imshow(o);