大家也可以加我的交流群,所有资料我会在群里分享出来哦:977947271

2020/5/30:

近日每天都有十几个很明显的小号加群,而且有的大号进群竟然打广告和卖不良物品,经我和群友讨论后,加群需要1元钱,但是进群后我会将钱退还给大家,只是为了过滤一些不好的人。

今天给大家介绍一下我第一次使用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 的可以私信我。

欢迎大家指正不足。

更多推荐

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