matlab VideoWriter向视频写入图片帧(目标跟踪的框)

最近查了好多资料做图像的读取操作,早期的matlab版本中的avifile,addframe等函数都已经删除了,需要用videowriter来做,所以先总结一下最近在处理的事情,剩下的慢慢更新。

  • writeVideo:即向文件中写入视频数据
  • writeVideo(OBJ,FRAME)

这个的作用是把一帧图像写入到视频文件OBJ,frame通常通过getframe函数返回值,cdata和colormap,如f.cata;f,colormap.而且对于写入的文件来说,高度和宽度是始终不变的量,在相应的配置文件中定义着一些方法。
二维的cdata(height×width)

选用的配置操作
索引灰度avi文件使用提供的帧
其他配置使用colormap创建RGB图片帧

三维的cdata(height×width×3)

选用的配置操作
索引灰度avi文件提示错误
其他配置不使用colormap,使用cdata创建RGB图片帧

如`

 backProjectionFrame = zeros(M.Height,M.Width,3);`
 backProjectionFrame(:,:,3) = probabilityMap;

writeVideo(OBJ,MOV)

它将一个视频文件中写入视频(帧结构序列),每一个帧包含cdata和colormap。

writeVideo(OBJ,IMAGE)

它将图像写入到视频文件。IMAGE是数组,里面的数据包括single,double或者unsigned int,包含灰度或者RGB的图片。在所有帧中高度和宽度必须是一样的。
当写入这些文件的时候数据必须在0~1之间。

writeVideo(OBJ,IMAGES)

和上面那个相比,它是把一序列的图像写进去,
格式是(高度×宽度×3×帧数)

结合一个例子理解一下如何向视频写入图片,官方的文件里有这样一句话:

Write image frames to the file.              
Convert the input frames into a format that is required
for writing to the file. This involves both colorspace
and datatype conversion

翻译过来就是先把帧的信息变成规定的格式,参照上面的配置来写入,格式中要包含color和data信息。

比如今天再做视频,处理目标跟踪,想加入目标跟踪框,那么我先创建一个框的图片。对于一个图片而言,可以用数组的形式表示,一个像素点间隔就是一,比如说我定义一个矩阵
在这里插入图片描述
首先我们要画一个框,包含row和column信息,那么容易知道他们的长宽,rmax-rmin和cmax-cmin,定义个二维矩阵即

thisFrame=zeros(rmax-rmin,cmax-cmin)

此时我们先考虑灰度图,灰度图的话相应的参数给[0,1]即可。比如代码如下

  • 初始化r和c的信息

rmin=50; rmax=180; cmin=37; cmax=216;

    thisFrame=zeros(rmax-rmin,cmax-cmin);
    thisFrame(rmin:rmax, cmin:cmin+1)=0.5;
    thisFrame(rmin:rmax, cmax-1:cmax)=0.5 ;
    thisFrame(rmin:rmin+1, cmin:cmax)=0.5 ;
    thisFrame(rmax-1:rmax, cmin:cmax)=0.5;
    imshow(thisFrame);

在这里插入图片描述
可以得到这样的,由于设置位0.5说明是灰色。
这里设计的时候cmin:cmin+1想加粗一圈。
在这里插入图片描述很直观的可以看出来多了一行和一列。
上面是针对二维的情况,也就是灰度图,那么如果想使用RGB的话怎么办?
RGB中是三维的,因此我们要定义这个图片时候需要多一个维度,即thisFrame=zeros(rmax-rmin,cmax-cmin,3);
写入RBG的值

    R=0.933;
    G=0.375;
    B=0.375;
 thisFrame(rmin:rmax, cmin:cmin+1,1)=R;
 thisFrame(rmin:rmax, cmax-1:cmax,1)=R;
 thisFrame(rmin:rmin+1, cmin:cmax,1)=R;
 thisFrame(rmax-1:rmax, cmin:cmax,1)=R;
 thisFrame(rmin:rmax, cmin:cmin+1,2)=G;
 thisFrame(rmin:rmax, cmax-1:cmax,2)=G;
 thisFrame(rmin:rmin+1, cmin:cmax,2)=G;
 thisFrame(rmax-1:rmax, cmin:cmax,2)=G;
 thisFrame(rmin:rmax, cmin:cmin+1,3)=B;
 thisFrame(rmin:rmax, cmax-1:cmax,3)=B ;
 thisFrame(rmin:rmin+1, cmin:cmax,3)=B ;
 thisFrame(rmax-1:rmax, cmin:cmax,3)=B;
 imshow(thisFrame);
 

在这里插入图片描述
那么操作的时候只需写

   open(avi_trackingVideo);
    writeVideo(avi_trackingVideo,thisFrame); 

就可以在视频中显示结果了,默认是存在matlab的bin文件夹中。类似的,如果你想写入其他图像,也需要图像的位置信息和色彩信息进行操作。

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值