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信息。

比如今天再做视频,处理目标跟踪,想加入目标跟踪框,那么我先创建一个框的图片。对于一个图片而言,可以用数组的形式表示,一个像素点间隔就是一,比如说我定义一个矩阵
matlab VideoWriter向视频写入图片帧(目标跟踪的框)_第1张图片
首先我们要画一个框,包含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);

matlab VideoWriter向视频写入图片帧(目标跟踪的框)_第2张图片
可以得到这样的,由于设置位0.5说明是灰色。
这里设计的时候cmin:cmin+1想加粗一圈。
matlab VideoWriter向视频写入图片帧(目标跟踪的框)_第3张图片很直观的可以看出来多了一行和一列。
上面是针对二维的情况,也就是灰度图,那么如果想使用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);
 

matlab VideoWriter向视频写入图片帧(目标跟踪的框)_第4张图片
那么操作的时候只需写

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

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

你可能感兴趣的:(2020年4月)