Matlab成长之路_1(图片,视频,摄像头的读取和显示)

摘要:
这一节简单介绍一些matlab自带函数实现图像,视频,摄像头数据的读取和显示方法。但是matlab自带的函数读取avi格式的视频时也只能读取那些原始格式的avi,比较局限性。其代码如下:%%一帧一帧的读取视频数据,然后播放mov=VideoReader;fori=1:mov.NumberOfFramesimg=read;imshow;end三、摄像头的读取和显示摄像头的读取要用到videoinput这个函数,当然它也只能读取能扫描到的摄像头,且名字也必须对应起来。

在计算机视觉和图像处理中,用matlab来验证算法的有效性是非常重要的,可以作为前期工作,因为matlab比c/c++等编程要来得简单些,不需要考虑那么多的数据类型和变量定义等。因此matlab在图像和视觉处理领域的这个得力工具也是需要掌握的。

这一节简单介绍一些matlab自带函数实现图像,视频,摄像头数据的读取和显示方法(因为刚入门,方法可能不是很好)。

一、图片的读取和显示。

比较简单,一个imread和imshow就可以搞定,类似opencv的用法,代码如下:

imshow( imread('lena.jpg') );

二、视频的读取和显示

视频数据的读取要用到VideoReader这个函数,按照matlab软件中举的例子,基本流程是在用VideoReader建立一个obj后,采用read函数来读取一帧帧图像,最后用movie函数来放映视频。但是matlab自带的函数读取avi格式的视频时也只能读取那些原始格式的avi,比较局限性。其读取过程可以采用下面2种方法:

先读完,再显示。

即先将视频数据读取到内存的结构体中,然后直接从内存中拿数据来显示,这显示的视频看起来比较流畅,可是一开始把所有数据读入内存的过程所用时间也有点长。

在matlab指定目录下放入需要读取的视频,我这里放的是test.avi.其代码如下:

%%先读取,后播放
mov = VideoReader( 'test.avi');
movFrames =mov.NumberOfFrames;
movHeight =mov.Height;
movWidth =mov.Width;
src(1:200) = struct( 'cdata', zeros(movHeight, movWidth, 3, 'uint8'),...
    'colormap', [] );%前面一定要是cdata,且后面要加上后面的colormap,
                    %否则运行出错,why?
% src(1:150) = struct( 'cdata', zeros(movHeight, movWidth, 3, 'uint8') );
for i =1:200 %按照matlab自带的例子,这里应该可以用movFrames代替200的,
            %但是运行会报错
    src(i).cdata =read( mov, i );
end
hf =figure;
set( hf, 'position', [150 150movWidth movHeight] );

movie( hf, src, 1, mov.FrameRate );

读一帧显示一帧。

直接从视频数据中抽取一帧,然后显示一帧图像,这样感觉视频显示的时候有点卡,不知道是不是程序设置问题。其代码如下:

%%一帧一帧的读取视频数据,然后播放
mov = VideoReader( 'test.avi');
for i=1:mov.NumberOfFrames
    img =read( mov, i );
    imshow(img);
end

三、摄像头的读取和显示

摄像头的读取要用到videoinput这个函数,当然它也只能读取能扫描到的摄像头,且名字也必须对应起来。读完后需要用preview函数来显示读取到的摄像头数据。

首先查看本机连有的摄像头,输入命令imaqhwinfo,显示结果为:

Matlab成长之路_1(图片,视频,摄像头的读取和显示)第1张

可以看出有个名为’winvideo’的摄像头被扫描到

查看'winvideo'摄像头的id号,输入命令imaqhwinfo( ‘winvideo’ ),显示结果为:

Matlab成长之路_1(图片,视频,摄像头的读取和显示)第2张

可以看出其DeviceIDs编号为1.另外返回的DeviceInfo如果为1x1的话,说明该摄像头可用。

自己设置显示的属性后即可显示摄像头数据了,此时的代码如下:

%%读取摄像头
%法一:

%imaqhwinfo
src = videoinput( 'winvideo', 1 );%由imaqhwinfo('winvideo')查看到DeviceIDs为1
figure( 'Name', '摄像头:'); 
uicontrol( 'String', 'Close', 'Callback', 'close(gcf)' );%gcf为current figure handle
                                                         %即为当前图像句柄  
vidRes = get( src, 'VideoResolution' );%返回分辨率,即摄像头数据的宽和高
nBands = get( src, 'NumberOfBands' );%返回摄像头数据的通道数,我这里返回的是3
hImage = image( zeros(vidRes(2), vidRes(1), nBands) );
preview(src, hImage);%以hImage的尺寸格式显示摄像头数据

当然,还可以采用更简单的读取方法,即采用默认的显示属性,代码如下:

%%读取摄像头
%法二:

%imaqhwinfo
src = videoinput( 'winvideo', 1 );%此处第二个参数1可以省略
preview( src );%以默认格式显示数据

免责声明:文章转载自《Matlab成长之路_1(图片,视频,摄像头的读取和显示)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇利用frm文件进行表结构恢复mysql ab主从复制出错及解决过程下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

matlab绘图

MatLab绘图 作为一个功能强大的工具软件,Matlab具有很强的图形处理功能,提供了大量的二维、三维图形函数。由于系统采用面向对象的技术和丰富的矩阵运算,所以在图形处理方面方便又高效。 一般来说,一个命令行输入一条命令,命令行以回车结束。但一个命令行也可以输入若干条命令,各命令之间以逗号分隔,若前一命令后带有分号,则逗号可以省略。 如果一个命令行很长...

matlab读取cvs文件的几种方法

matlab读取CVS文件的几种方法: 1,实用csvread()函数 csvread()函数有三种使用方法: 1、M = csvread('filename')2、M = csvread('filename', row, col)3、M = csvread('filename', row, col, range) 第一种方法中,直接输入文件名,将数据读...

如何利用MATLAB并行计算缩短程序运行时间

本来CPU就是双核,不过以前一直注重算法,没注意并行计算的问题。今天为了在8核的dell服务器上跑程序才专门看了一下。本身写的程序就很容易实现并行化,因为beamline之间并没有考虑相互作用。等于可以拆成n个线程并行,要是有550核的话,估计1ms就算完了。。。 先转下网上找到的资料。 一、Matlab并行计算原理梗概Matlab的并行计算实质还是主从...

面向对象:MATLAB的自定义类 [MATLAB]

  这几天刚刚开始学习MATLAB的面向对象编程。以前做的事情都是用MATLAB写一些简单的脚本或者函数,这方面MATLAB成熟的函数和直截了当的矩阵运算方法和语法都很容易上手,方便人专注于算法本身。前几天写代码的时候想到,在实际用MATLAB进行数值计算时,将数据和函数用一些方法组织起来也会带来很大的便利,否则零散的数据和函数总归看着不舒服。比如,我恰好...

Matlab中怎样将.dat格式的文件进行加载转化为一个矩阵??

在网上下载了一个数据集rating.dat,格式为.dat的,要在matlab中使用,必须将其转化为一个.mat格式的矩阵,下面写一下具体步骤: 第一步:打开matlab,界面如图: 然后点击“打开”选项:界面如下 例如选择rating.dat 文件  点击上图右下角“打开”,得到如下界面:  然后在“列分隔符”里进行选择,由于原文本文件格式如下图:...

【转】几款网络仿真软件的比较

转自: 网络仿真技术是一种通过建立网络设备和网络链路的统计模型, 并模拟网络流量的传输, 从而获取网络设计或优化所需要的网络性能数据的仿真技术。由于仿真不是基于数学计算, 而是基于统计模型,因此,统计复用的随机性被精确地再现。网络仿真技术具有以下特点:一, 全新的模拟实验机理使其具有在高度复杂的网络环境下得到高可信度结果的特点。二, 网络仿真的预测功能是其...