《玩儿起来吧》MATLAB 实时图像处理

  • 视频教学地址
  • 一、如何获取实时图像
  • 二、如何实时处理图像
  • 三、简单的人脸识别
  • 四、简单的目标追踪
  • 其他

大家学了图像处理之后,是不是就想学以致用。而要用于生活中,最好的方式就是和摄像头搭配,实现实时图像处理。今天就给大家分享MATLAB实时图像处理的基础方法,希望能帮你快速入门。

by 今天不飞了


视频教学地址

《玩儿起来吧》MATLAB实时图像处理(一)如何获取实时图像
《玩儿起来吧》MATLAB实时图像处理(二)如何实时处理图像
《玩儿起来吧》MATLAB实时图像处理(三)最简单的人脸检测与追踪
《玩儿起来吧》MATLAB实时图像处理(四)目标追踪


一、如何获取实时图像

  1. 有摄像头的小伙伴
    这篇博客有基本的摄像头配置方法 《MATLAB摄像头实时图像处理》
%% 配置摄像头
% -----------------------------------------
% 查看适配器
disp(imaqhwinfo)
% 查看设备及其支持的格式
info = imaqhwinfo('winvideo');
disp(info.DeviceInfo.SupportedFormats)
% --------你要是知道就不要运行这两句-------%% 生成对象并同步画面
obj = videoinput('winvideo',1,'MJPG_640x480');
h = preview(obj);%% 实时显示(处理)
figure('Position',[800,400,1000,500])
while ishandle(h)tic% 获取影像frame = getsnapshot(obj);  % 获取帧% 一顿疯狂处理img = rgb2gray(frame);% 显示subplot(121),imshow(frame)subplot(122),imshow(img)drawnowt = toc;disp(round(1/t))
end
  1. 没有摄像头的小伙伴
    看这里【MATLAB】没有摄像头怎么做实时图像处理

二、如何实时处理图像

答案就是,利用while语句,对获取到的影像“一顿疯狂处理”。
请自行加入自己的算法。

%% 实时显示(处理)
% 生成对象并开启摄像机
obj = videoinput('winvideo',1,'MJPG_640x480');
h1 = preview(obj);
h2 = figure('Position',[100,50,1680,800]);% 开始
while ishandle(h1)&&ishandle(h2)tic% 获取影像frame = getsnapshot(obj);  % 获取帧frame = im2double(frame(:,1+80:end-80,:));% 一顿疯狂处理% --------------------------------img1 = DoSomethingCrazy1(frame);img2 = DoSomethingCrazy2(frame);img3 = frame.*img2*2;% --------------------------------    img = cat(2,img1,cat(3,img2,img2,img2),img3);% 保存imshow(img)drawnowt = toc;disp(round(1/t))
endfunction ed = DoSomethingCrazy1(frame)
% 归一化彩色空间
gray = rgb2gray(frame);
mask = double(gray>0.05);
imsum = sqrt(sum(frame.^2,3));
ed = frame./imsum.*mask;
endfunction ed = DoSomethingCrazy2(frame)
% 灰度边缘
core1 = [1,1,1;0,0,0;-1,-1,-1;];
core2 = [1,1,0;1,0,-1;0,-1,-1;];
frame = rgb2gray(frame);
im1 = imfilter(frame,core1);
im2 = imfilter(frame,core1');
im3 = imfilter(frame,core2);
im4 = imfilter(frame,core2');
ed = max(abs(cat(3,im1,im2,im3,im4)),[],3);
end

三、简单的人脸识别

核心函数vision.CascadeObjectDetector,使用方法演示代码如下

function findme()% 创建GUI
Fig = figure('Position',[100,150,980,500]);Pnl1 = uipanel(Fig,'Position',[0.05,0.17,0.9,0.8]);
Pnl2 = uipanel(Fig,'Position',[0.05,0.05,0.9,0.1]);Axes1 = axes(Pnl1,'Position',[0,0,1/2,1]);
Axes2 = axes(Pnl1,'Position',[1/2,0,1/2,1]);Bt = uicontrol(Pnl2,'style','togglebutton','String','人脸检测','Fontsize',16,...'Units','normalized','Position',[2/5,0,1/5,1],'Callback',@FaceDetection);
drawnow% 开启摄像头
Hcamera = [];
Hobj = [];
if isempty(Hcamera)Hobj = videoinput('winvideo',1,'MJPG_640x480');Hcamera = preview(Hobj);frame = getsnapshot(Hobj);  % 获取帧[rows,cols,~] = size(frame);
end% 人脸识别
flag = 0;
faceDetector = vision.CascadeObjectDetector();
gap = 2;% 画
[Face,rp,cp] = drawface();% 开始
while 1if ishandle(Hcamera)% 获取影像frame = getsnapshot(Hobj);  % 获取帧frame = im2double(frame);% 显示imshow(frame,'Parent',Axes1)% 检测if flagbboxx = face(frame);if ~isempty(bboxx)Px = bboxx(1,1);Py = -bboxx(1,2);Face.XData = Px;Face.YData = Py;endhold(Axes1,'on')for i = 1:size(bboxx,1)bbox = bboxx(i,:);rc = bbox+[-bbox(3)/4,-bbox(4)/4,bbox(3)/2,bbox(4)/2];rectangle('Position',rc,'Curvature',0,...'LineWidth',2,'LineStyle','--',...'EdgeColor','y','Parent',Axes1)endhold(Axes1,'off')enddrawnowelsebreakend
endfunction FaceDetection(~,~)flag = get(Bt,'Value');endfunction bboxx = face(frame)frame = frame(1:gap:end,1:gap:end,:);bboxx = step(faceDetector, frame);bboxx = bboxx*gap;endfunction [h,rp,cp] = drawface()        rp = cols/2;cp = -rows/2;% 绘制h = plot(rp,cp,'ro','MarkerSize', 35);hold offaxis equalaxis([0,cols,-rows,0,0,1])axis offview([0,0,1])set(gca,'looseInset',[0 0 0 0])endend

想加入b站表情包,看这篇把B站表情包植入MATLAB


四、简单的目标追踪

核心函数vision.PointTracker('MaxBidirectionalError',1)[point,validity] = tracker(frame),使用方法演示代码如下

function findme()% 创建GUI
Fig = figure('Position',[500,450,980,500]);Pnl1 = uipanel(Fig,'Position',[0.05,0.17,0.9,0.8]);
Pnl2 = uipanel(Fig,'Position',[0.05,0.05,0.9,0.1]);Axes1 = axes(Pnl1,'Position',[0,0,1/2,1]);
Axes2 = axes(Pnl1,'Position',[1/2,0,1/2,1]);Bt = uicontrol(Pnl2,'style','togglebutton','String','锁定目标','Fontsize',16,...'Units','normalized','Position',[2/5,0,1/5,1],'Callback',@LockTarget);
drawnow% 开启摄像头
Hcamera = [];
Hobj = [];
if isempty(Hcamera)Hobj = videoinput('winvideo',1,'MJPG_640x480');Hcamera = preview(Hobj);frame = getsnapshot(Hobj);  % 获取帧
end% 人脸识别
flag = 0;
tracker = vision.PointTracker('MaxBidirectionalError',1);
gap = 1;
objectRegion = [0,0,0,0];
objFrame = [];
points = [];% 开始
while 1if ishandle(Hcamera)% 获取影像frame = getsnapshot(Hobj);  % 获取帧frame = im2double(frame);if flag% 检测point = face(frame);objimg = insertMarker(frame,point,'+','Color','green');imshow(objimg,'Parent',Axes1)else% 普通显示imshow(frame,'Parent',Axes1)enddrawnowelsebreakend
endfunction LockTarget(~,~)% 降采样frame = frame(1:gap:end,1:gap:end,:);objFrame = frame;% 确定目标位置[x,y,~] = ginput(2);objectRegion = [min(x),min(y),max(x)-min(x),max(y)-min(y)]/gap;% 检测特征点points = detectMinEigenFeatures(rgb2gray(frame),'ROI',objectRegion);pointImage = insertMarker(frame, points.Location,'+','Color','green');imshow(pointImage,'Parent',Axes2)% 初始化跟踪器release(tracker)initialize(tracker, points.Location, frame);flag = 1;endfunction point = face(frame)% 降采样frame = frame(1:gap:end,1:gap:end,:);% 追踪[point,validity] = tracker(frame);point = point(validity,:);% 更新目标if size(point,1)<20% 方法一
%             x = point(:,1);
%             y = point(:,2);
%             objectRegion = [min(x),min(y),max(x)-min(x),max(y)-min(y)];
%             points = detectMinEigenFeatures(rgb2gray(frame),'ROI',objectRegion);% 方法二release(tracker)initialize(tracker, points.Location, objFrame);[point,validity] = tracker(frame);point = point(validity,:);end% 反算坐标point = point*gap;endend

其他

  1. 不要直接照搬代码,你的摄像头型号参数不一定跟我一样,请根据实际情况修改。具体方法见以下视频或博客
    《玩儿起来吧》MATLAB实时图像处理(一)如何获取实时图像
    《MATLAB摄像头实时图像处理》
  2. 暂时没想到

《玩儿起来吧》MATLAB 实时图像处理系列(一二三四)相关推荐

  1. MATLAB摄像头实时图像处理

    (来点有用的)MATLAB摄像头实时图像处理 第一步:安装硬件支持包 第二步:获取摄像头信息 第三步:数据实时处理 最后 by HPC_ZY 第一步:安装硬件支持包 打开附加功能项 查找如下摄像头支持 ...

  2. 《精通Matlab数字图像处理与识别》一6.2 傅立叶变换基础知识

    本节书摘来自异步社区<精通Matlab数字图像处理与识别>一书中的第6章,第6.2节,作者 张铮 , 倪红霞 , 苑春苗 , 杨立红,更多章节内容可以访问云栖社区"异步社区&qu ...

  3. 机器视觉及图像处理系列之二(C++,VS2015)——图像级的人脸识别(1)

    机器视觉及图像处理系列之二(C++,VS2015)--图像级的人脸识别(1) 接上一篇,一切顺利的话,你从github上clone下来的整个工程应该已经成功编译并生成dll和exe文件了:同时,Ima ...

  4. matlab对于处理数字图像的优点,学习MATLAB数字图像处理经验谈

    学习MATLAB数字图像处理经验谈 学习数字图像处理经验谈 (赵小川) 一.面向应用:层层分解.抓住要点 我们学习数字图像处理的最终目的还是应用,不管是用它来研制产品还是研发项目抑或是研究课题,都要用 ...

  5. 基于MATLAB的图像处理系统

    目录 设计目的-------..-------.----3 设计要求-------.----------.-.3 设计的内容------..---------.--3 题目分析------------ ...

  6. 基于matlab的硅晶体模型,基于Matlab的图像处理技术识别硅太阳电池的缺陷

    第 44 卷 第 7 期 2010 年 7 月 上 海 交 通 大 学 学 报 JOURNAL OF SHANGHAI J IAOTON G UNIVERSITY Vol. 44 No. 7 Jul. ...

  7. 四轴飞行器1.4 姿态解算和Matlab实时姿态显示

    四轴飞行器1.4 姿态解算和Matlab实时姿态显示 MPU6050数据读取出来后,经过一个星期的努力,姿态解算和在matlab上的实时显示姿态终于完成了. 1:完成matlab的串口,并且实时通过波 ...

  8. Matlab形态学图像处理:二值图像分割 标记连通区域和重心位置 删除连通区域

    Matlab形态学图像处理:二值图像分割 标记连通区域和重心位置 删除连通区域 [尊重原创,转载请注明出处]http://blog.csdn.net/guyuealian/article/detail ...

  9. android图像处理系列之五-- 给图片添加边框(中)

    前面一篇讲到给图片加边框的方式,只能给图片加一些有规则的边框,如果想加一些比较精美的效果,就有点麻烦了.下面就给出解决这个问题的思路. 思路是:一些比较精美的花边图片我们是很难用代码控制,就目前本人水 ...

  10. Matlab计算机视觉/图像处理工具箱(待续)

    Matlab计算机视觉/图像处理工具箱推荐 http://blog.csdn.net/liuyue2046/article/details/12992139 VLFeat和Piotr's Image ...

最新文章

  1. 百度编辑器(1.4.3—net版)上传图片路径及其他配置
  2. go 查看全局安装了哪些包_GO 文档笔记
  3. linux mysql删除密码忘记了_linux下忘记mysql密码的几种找回方法(推荐)
  4. 发布虚拟机WEB服务 备忘
  5. python办公实例100例-Python 100例(上)
  6. 路由器将迎重磅升级 WiFi速度提升3倍
  7. 安卓rom制作教程_MIUI官改篇对比分析-极光ROM-台湾W大-星空未来-其他官改官网
  8. 162天,从华为外包5k转岗正式员工15k,心酸只有自己知道
  9. 最新微博图片相册批量下载工具
  10. がいねんとれいさいのにちじょう
  11. dw中css目标规则命名,css 常用样式命名规则
  12. 【php】PHP语言进阶
  13. 浪漫表白c语言程序玫瑰,c语言玫瑰告白代码
  14. 刷了OpenWrt Attitude Adjustment 12.09,很满意
  15. AD15 原理图更新为PCB图遇到的错误及解决办法(footprint not found;unknown pin)
  16. 齐供应TAPPI四碘化5,10,15,20-四(对-N,N,N三甲基苯胺基)卟啉敏化的钛酸盐纳米管(TAPPI-TNTs)高效的可见光催化剂岳
  17. 爬虫之理财网站招标产品(Python篇)
  18. 调戏chatGPT(二)下围棋
  19. 小程序access_token耗尽问题
  20. netfilter 子系统实现tcp断链

热门文章

  1. android更新版本下载安装,Android版本更新下载apk自动安装的方法
  2. 从抖音到“奶头乐“,它是如何一步步毁掉我们的?
  3. 为什么大多公司不要培训班培训出来的Java程序员?
  4. vfp 操作excel
  5. 一个完全的新人如何搭建自己的个人网站
  6. Linux环境中的网络分段卸载技术 GSO/TSO/UFO/LRO/GRO
  7. php毕业论文总结,毕业设计总结
  8. C语言if语句实现成绩划分
  9. 编程语言分类-编译型,解释型
  10. 神经派考古学 - 推荐一个blog