一、基于Matlab的图像采集及直方图显示程序
1.实验程序
disp(imaqhwinfo);% 查看适配器
info = imaqhwinfo('winvideo');% 查看设备及其支持的格式
disp(info.DeviceInfo.SupportedFormats);
obj = videoinput('winvideo',1);% 生成对象
img = getsnapshot(obj); % 获取帧
figure;
imshow(img);
figure;
imhist(img);
imwrite(img,'E:\ks202110\result1img.jpg');
(2)实验结果
二、基于Matlab的视频采集
1.实验程序
disp(imaqhwinfo);% 查看适配器
info = imaqhwinfo('winvideo');% 查看设备及其支持的格式
disp(info.DeviceInfo.SupportedFormats);
obj = videoinput('winvideo',1);% 生成对象
h = preview(obj);
writerObj = VideoWriter('E:\keshe202110\result1vid.avi'); %定义一个视频文件用来存动画
open(writerObj);
while ishandle(h)
frame = getsnapshot(obj); % 获取帧
writeVideo(writerObj,frame);
drawnow
end
close(writerObj); % 关闭视频文件句柄
2.实验结果
三、基于Matlab的视频处理
1.实验程序
VideoName='E:\ks202110\实验数据文件\Videos\car.avi';
VideoData=VideoReader(VideoName) ;
%截取部分帧显示图像
for NumberFram=2:5:15
FrameData=uint(VideoData(NumberFram).cdata)
subplot (2,2,floor(NumberFram/10)+1)
imagesc(FrameData) ;
title(['第'+num2str(NumberFram)+'帧图像']);
colormap(gray) ;
axis off;
end
axis off;%视频播放
movie(VideoData) ;
%打开文件
VideoName= 'E:\keshe202110\result1vid.avi';
mov=VideoReader(VideoName) ;
N = mov.NumberOfFrames;
%获取前两帧图像数据
for i = 2:N
frame = read(mov,i);
Pframe = read(mov,i-1);
% x = rgb2gray(frame); %将彩色图像转化为灰度图像
% y = rgb2gray(Pframe);
subplot(1,3,1);
imshow(Pframe,[]);
title(sprintf('第一帧图像'));
subplot(1,3,2);
imshow(frame,[]);
title(sprintf('第二帧图像'));
%差分算法
% c = x-y;
c=frame-Pframe;
% c = medfilt2(c);%中值滤波
subplot(1,3,3);
imshow(c,[]);
title(sprintf('帧差图像'));
end
%打开图像
VideoName='E:\keshe202110\实验数据文件\Videos\car.avi';
mov=VideoReader(VideoName) ;
N = mov.NumberOfFrames;
[m,n,z]=size(read(mov,1));
%获取视频帧数k 及图像的大小m和n
Y1=zeros(1,N);
%提取没帧图像的中间点像素,将其存入数组Y1
for FrameNumber = 1:N
videoFrame = read(mov,FrameNumber);
videoFramedata=videoFrame(:,:,1);
Y1(FrameNumber)=videoFramedata(m/2,n/2);
end
%画出各帧中心像素变化图
t=1:N;
figure
stem(t,Y1);
title('每帧图像中心点像素分析图');xlabel('帧数');
ylabel('像素值');
2.实验结果
ps:白色部分是我自己遮掉的,跟实验无关!
3.实验结果分析
实验结果如上图所示。通过实验可知,利用帧间差分法进行运动目标提取时实现较为简单,程序设计复杂度低。但其实验结果的好坏却依赖于选择的帧间时间间隔。对于快速运动的物体,需要选择较小的时间间隔,如果选择不合适,当物体在前后两帧中没有重叠时,会被检测为两个分开的物体;而对于慢速运动的物体来说,应该选择较大的时间差,如果时间选择不适当,当物体在前后两帧中几乎完全重叠时,则检测不到运动的物体,因此就更谈不上对运动的物体进行提取。