基于Matlab的图像视频采集与处理实验(图像采集、图像直方图显示、视频采集、视频帧间差分)

一、基于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.实验结果分析
实验结果如上图所示。通过实验可知,利用帧间差分法进行运动目标提取时实现较为简单,程序设计复杂度低。但其实验结果的好坏却依赖于选择的帧间时间间隔。对于快速运动的物体,需要选择较小的时间间隔,如果选择不合适,当物体在前后两帧中没有重叠时,会被检测为两个分开的物体;而对于慢速运动的物体来说,应该选择较大的时间差,如果时间选择不适当,当物体在前后两帧中几乎完全重叠时,则检测不到运动的物体,因此就更谈不上对运动的物体进行提取。

猜你喜欢

转载自blog.csdn.net/change_xzt/article/details/129757993