matlab通过摄像头获取图像进行处理

原创 2015年08月15日 23:40:57
  1. 安装摄像头

    笔记本自带也行,或者买一个usb摄像头,安装驱动之后检查能否正常获取。有时候即使usb摄像头在电脑硬件中显示了,在matlab中还是不能调用摄像头,可以在命令窗口中写一句代码:imaqreset  ,以使得matlab加载电脑中能够获取图片的硬件。输入videoinput('winvideo')没有报错即可。
  2. 获取摄像头硬件信息

    使用imaqhwinfo函数,来获取电脑上安装的摄像头的名称,比如'winvideo',之后可以利用imaqhwinfo('winvideo')来进一步获取设备ID等边信息,这在之后的视频流获取中会用到。获取设备ID之后(比如ID为1),可以进一步用imaqhwinfo('winvideo',1)来获取视频的默认格式大小等信息。
    我们win_info=imaqhwinfo('winvideo'),则ID可用win_info.DeviceIDs来获取,同理,可用以下代码获取摄像头支持的格式
    win_info=imaqhwinfo('winvideo');
    d_win_info=imaqhwinfo('winvideo',1);
    d_win_info.SupportedFormats

    可得到
    ans =

        'YUY2_160x120'    'YUY2_176x144'    'YUY2_320x240'    'YUY2_352x288'    'YUY2_640x480'

  3. 创建视频对象

    通过第二步得知的摄像头信息,我们就可以通过函数vid = videoinput(camera_name, camera_id, format)来创建一个名为vid的视频对象
  4. 预览获取的视频流

    在进行图像数据处理之前想要预览一下摄像头所获取的视频流,可以通过函数preview(vid)来创建一个窗口进行预览。关闭窗口用closepreview(vid)。
  5. 设置获取的视频流的属性值(可选)

    视频对象包括视频输入对象,以及视频源对象,当摄像头获取输入对象时,同时产生一个视频源对象。源对象是matlab用来进行处理的对象(个人理解)。
    获取视频图像的信息可以通过get函数来获取,如get(vid)或者get(getselectedsource(vid))。使用set函数可以设置摄像头获取的图像的一些属性值,也可以直接使用结构数组的“点”来赋值,比如,要持续通过摄像头获取图像,则可以将TriggerRepeat的值设置为Inf(无穷),一下两个代码等价:
    set(vid,'TriggerRepeat',Inf);
    vid.TriggerRepeat= Inf;   %持续不断获取图像
    设置完摄像头触发重复时间后,再设置摄像头获取图像的快慢,可通过设置FrameGrabInterval的值来实现,设置方法同上。
    vid.FrameGrabInterval=5;        %每隔5帧取一幅图像
    set(vid,'ReturnedColorSpace','rgb');  %设置颜色空间为RGB
    set(vid,'ReturnedColorSpace','grayscale'); %设置颜色空间为灰度
    
    设置好视频输入对象之后,再对源对象进行设置:
    vid_src=getselectedsource(vid);
    set(vid,'Tag','motion detection setup');
    set(gcf,'doublebuffer','on');
  6. 获取图像数据

    使用start函数来开始进行图像获取,结束时使用stop函数。
  7. 附上源码:

    %http://wenku.baidu.com/view/674357ff0242a8956bece470.html?re=view
    %Track from folder
    
    a = imaqhwinfo;
    [camera_name, camera_id, format] = getCameraInfo(a);
    
    
    % Capture the video frames using the videoinput function
    % You have to replace the resolution & your installed adaptor name.
    vid = videoinput(camera_name, camera_id, format);
    set(vid, 'TriggerRepeat', Inf);
    % Set the properties of the video object
     set(vid, 'FramesPerTrigger', 1);
    set(vid, 'ReturnedColorspace', 'rgb');
    vid.FrameGrabInterval =1;%抓取时间间隔
    vid_src=getselectedsource(vid);%add
    set(vid,'Tag','motion ');%add
    set(gcf,'doublebuffer','on');%add
    
    %set(vid, 'FrameGrabInterval', 5);%also OK
    %start the video aquisition here
    start(vid)
    
    % Set a loop that stop after 100 frames of aquisition
    while(vid.FramesAcquired<=Inf)
        % Get the snapshot of the current frame
                 %data = getsnapshot(vid);
        data=getdata(vid,2);%add
        diff_im=imabsdiff(data(:,:,:,2),data(:,:,:,1));%add
        
        % Convert the resulting grayscale image into a binary image.
        diff_im = im2bw(diff_im,0.18);
        
        % Remove all those pixels less than 300px
        bw = bwareaopen(diff_im,300);
        rows = size(bw, 1);                 %pixels的第1维即为视频画面的行数
        cols = size(bw, 2);
     
        % 寻找上下边界
         topEdge = 0;
         bottomEdge=0;
        cou=1;
        for h = 1:rows
            for w = 1:cols
                if bw(h, w) > 0.5
                    bottomEdge = h;
                    if cou == 1
                        topEdge = bottomEdge;
                    end
                    cou = cou+1;
                    break;
                end
            end
        end
    
        % 寻找左右边界
        rightEdge=0;
        leftEdge=0;
        coun=1;
        for w = 1:cols
            for h = 1:rows
                if bw(h, w) > 0.5
                    rightEdge = w;
                    if coun == 1
                        leftEdge = rightEdge;
                        coun = coun+1;
                    end
                    break;
                end
            end
        end   %add
        % 矩形框生成
        wd = rightEdge-leftEdge;
        hg = bottomEdge-topEdge;
        widt = wd/2;
        heit = hg/2;
        cenx = leftEdge+widt;
        ceny = topEdge+heit;
    
         cenx1(1)=cenx;        % 创建一个动态数组来记录矩形框的中心坐标
         ceny1(1)=ceny;
        % 显示并标记
        figure(1);
        % Display the image
        imshow(data(:,:,:,2))%add(:,:,:,2)
        hold on
        if wd>0&&hg>0
         rectangle('Position',[leftEdge topEdge wd hg], 'EdgeColor', 'r', 'LineWidth', 2);
        plot(cenx1,ceny1, 'm-.s','MarkerSize',7, 'LineWidth', 1) 
        end
                
        hold on
        end
    % Stop the video aquisition.
    stop(vid);
    
    % Flush all the image data stored in the memory buffer.
    flushdata(vid);
    
    % Clear all variables
    clear all 
    
    
    function [camera_name, camera_id, resolution] = getCameraInfo(a)
    camera_name = char(a.InstalledAdaptors(end));
    camera_info = imaqhwinfo(camera_name);
    camera_id = camera_info.DeviceInfo.DeviceID(end);
    resolution = char(camera_info.DeviceInfo.SupportedFormats(end));
    
版权声明:本文为博主原创文章,未经博主允许不得转载。

Matlab摄像头视频基本处理

、读取摄像头 1.首先保证摄像头及其驱动正确在电脑上安装 2.简单的代码显示驱动摄像头,并显示: [python] view plain copy print?...
  • V_zhangyang
  • V_zhangyang
  • 2017年04月11日 20:09
  • 910

Matlab摄像头视频基本处理

一、读取摄像头视频 1.前提是保证摄像头及其驱动已安装成功,下面是简单的代码来调用摄像头: %调用摄像头 vid = videoinput('winvideo',1); preview(vid);2...
  • u013369689
  • u013369689
  • 2014年01月03日 19:14
  • 1905

matlab使用摄像头

错误提示: obj = videoinput('winvideo', 1); Error using videoinput (line 217) Invalid ADAPTORNAME specifi...
  • darren2015zdc
  • darren2015zdc
  • 2016年03月28日 19:13
  • 829

Matlab摄像头基本操作

Matlab中的图像获取工具箱给我们提供了必要的函数,我们直接调用就可以了。在在这帖中我们主要就是简单的介绍如何使用该工具箱进行对USB2.0摄像头的编程 废话不多说,我们开始言归正传了。但是一...
  • msq19895070
  • msq19895070
  • 2012年09月26日 09:48
  • 10538

图像处理 MATLAB 读取摄像头

图像处理 MATLAB 读取摄像头一、摄像头的属性imaqhwinfo()可以了解摄像头的属性,他返回一个结构体,结构体中有摄像头的ID——DeviceID,和摄像头的信息——DeviceInfo;C...
  • qq_27531383
  • qq_27531383
  • 2017年03月09日 14:36
  • 1391

用matlab代码开启笔记本摄像头的6种方法——图像效果各不相同,纯自我总结,与大家分享

%% 读取摄像头 %法一: imaqhwinfo imaqhwinfo('winvideo') %imaqhwinfo src = videoinput( 'winvideo', 1 );%...
  • wzy0754
  • wzy0754
  • 2014年08月18日 19:27
  • 1829

matlab链接摄像头

imaqhwinfo; %查看硬件信息 %若是 InstalledAdaptors:{}表示摄像头为空 %如果摄像头只是一般的摄像头的话,输入 supportPackageInstaller; %安装...
  • xplusone
  • xplusone
  • 2015年10月14日 16:15
  • 331

MATLAB 摄像头视频获取和保存

MATLAB 摄像头视频获取和保存 一、读取摄像头视频 如题目,首先你需要有一个摄像头(usb或者本本自带的都可以)并且安装好了驱动,保证设备可以正常使用。 先来段简单的通过MA...
  • taiyangwangzi
  • taiyangwangzi
  • 2013年07月04日 12:15
  • 21114

MATLAB 摄像头视频获取和保存

原文链接http://www.cnblogs.com/alphashi/archive/2013/04/13/3019146.html 一、读取摄像头视频 如题目,首先你需要有一个摄像头(usb或...
  • DashawnTang
  • DashawnTang
  • 2017年01月12日 17:03
  • 561

用matlab2014b调用摄像头

安装webcom成功后在命令窗口输入如下内容,这个是在安装完成后帮助文件里的例子,然后你就可以用自己的笔记本给自己拍照了 camList = webcamlist camList =  ...
  • juluwangriyue
  • juluwangriyue
  • 2016年11月09日 14:51
  • 1053
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:matlab通过摄像头获取图像进行处理
举报原因:
原因补充:

(最多只允许输入30个字)