使用MATLAB调用摄像头并拍照—详细代码

今天给大家介绍一下我第一次使用matlab进行摄像头拍照并进行图像处理的过程

下面是个简单的GUI:
在这里插入图片描述
虽然不使用GUI也可以实现这种功能,不过我建议初学者最好使用GUI来控制程序,之后有时间我会发布不使用GUI来实现这种功能的博文。

GUI界面的建立这里就不多说了。

这个GUI是由一个坐标轴和四个按钮组成,按钮分别是“打开摄像头”,“拍照并保存”,“关闭摄像头”,“图像处理”,对应代码中的pushbutton1/2/3/4。

目的是先打开摄像头,再拍摄照片到电脑中,最后调用图片去进行处理。

下面介绍代码:
这里是 pushbutton1 的callback

varargout{1} = handles.output;
global vid
%定义一个全局变量,global的用法可以参照我的另一篇博文
vid = videoinput('winvideo',1,'YUY2_640x480');
%winvideo函数可参照另一篇文章中imaqhwinfo的用法
set(vid,'FramesPerTrigger',1);
%用特定的帧数去显示视频
set(vid,'TriggerRepeat',Inf);
vidRes = get(vid,'VideoResolution');
%二维数组,获取视频长宽
nBands = get(ojb,'NumberOfBands');
%获得图像的颜色层数
axes(handles.axes1);
%让视频显示在指定的axes1坐标中
global hImage
%定义全局变量hImage
hImage = image(zeros(vidRes(2),vidRes(1),nBands));
%获得图像的句柄
preview(vid,hImage);

点开“打开摄像头后”在 axes1 中就可看到拍摄的画面

接下来介绍图片的保存:

global vid;
frame = getsnapshot(vid);
%摄像头每一帧的画面
frame = ycbcr2rgb(frame);
%将捕获的图像转化为RGB格式的图像
[filename,pathname] = uiputfile({'*.bmp','BMP files':'*.jpg','JPG files'}'格式');
%照片名称与储存路径
if isequal(filename,0) || isequal(pathname,0)
%文件名与路径是否被占用
	return;
else 
	fpath = fullfile(pathname,filename);
end
imwrite(frame,fpath);

其实这种操作的逻辑对于matlab 的GUI来说,都可以比较简便的解决

关闭摄像头:

%很简单,在callback中写入一个函数即可
close(findobj('gca','figure_csdn');
%findobj('PropertyName','PropertyValue',...)
返回figure的句柄

对于想要对图像进行处理的话:

%就需要在callback中写入读取上图保存的图片的代码
x = imread('name.jpg');
imshow(x);
%在进行相应的处理程序

因为 gui 的代码冗长且很多地方无用,就无法将代码全部贴出来,但是对于有些基础的是可以看懂的,所有代码都放在相应的cb中进行。

之后会发出更复杂的定时拍照的程序 gui,希望有技术大佬可以帮助指点错误与不足。

如果有需要这篇文章中源码和 gui 的可以私信我。

欢迎大家指正不足。

发布了9 篇原创文章 · 获赞 15 · 访问量 3953

猜你喜欢

转载自blog.csdn.net/qq_45504119/article/details/104390385