圖像序列生成Avi格式視頻——matlab實現


今天做目標跟蹤,由於是對圖像序列中目標做跟蹤,在跟蹤了以后想要將跟蹤的效果做成視頻。問了度娘看了前輩們的一些做法,大多零散。在此將參考前輩們的方法而寫的一個將目標跟蹤中效果保存成視頻的matlab小程序分享給大家,希望能有所幫助。

分為兩個步驟:

一:將目標在對應的圖像中畫出(以矩形框為例)代碼如下:

 1 function result=draw_rect(data,pointAll,windSize)
 2 % 函數調用:result=draw_rect(data,pointAll,windSize)
 3 % 函數功能:在圖像畫個長方形框
 4 % 函數輸入:data為原始的大圖,可為灰度圖,可為彩色圖
 5 %          pointAll 框的左上角在大圖中的坐標(每行代表一個坐標),
 6 %                   注意:在圖中的坐標系為第一列為y,第二列為x(很奇怪的)
 7 %          windSize 框的大小 windSize=[112,92] 分別表示長寬
 8 %          showOrNot 是否要顯示,默認為顯示出來
 9 % 函數輸出:

result - 結果圖像數據 13 if nargin < 4 14 showOrNot = 1; 15 end 16 17 rgb = [255 0 0]; % 邊框顏色 18 lineSize = 3; % 邊框大小,取1,23 19 20 windSize(1,1)=windSize(1,1); 21 windSize(1,2) = windSize(1,2); 22 if windSize(1,1) > size(data,1) ||... 23 windSize(1,2) > size(data,2) 24 state = -1; % 說明窗口太大,圖像太小,沒必要獲取 25 disp('the window size is larger then image...'); 26 return; 27 end 28 size(data,1) 29 result = data; 30 if size(data,3) == 3 31 for k=1:3 32 for i=1:size(pointAll,1) %畫邊框順序為:上右下左的原則 33 result(pointAll(i,1),pointAll(i,2):pointAll(i,2)+windSize(i,1),k) = rgb(1,k); 34 result(pointAll(i,1):pointAll(i,1)+windSize(i,2),pointAll(i,2)+windSize(i,1),k) = rgb(1,k); 35 result(pointAll(i,1)+windSize(i,2),pointAll(i,2):pointAll(i,2)+windSize(i,1),k) = rgb(1,k); 36 result(pointAll(i,1):pointAll(i,1)+windSize(i,2),pointAll(i,2),k) = rgb(1,k); 37 if lineSize == 2 || lineSize == 3 38 result(pointAll(i,1)+1,pointAll(i,2):pointAll(i,2)+windSize(i,1),k) = rgb(1,k); 39 result(pointAll(i,1):pointAll(i,1)+windSize(i,2),pointAll(i,2)+windSize(i,1)-1,k) = rgb(1,k); 40 result(pointAll(i,1)+windSize(i,2)-1,pointAll(i,2):pointAll(i,2)+windSize(i,1),k) = rgb(1,k); 41 result(pointAll(i,1):pointAll(i,1)+windSize(i,2),pointAll(i,2)-1,k) = rgb(1,k); 42 if lineSize == 3 43 result(pointAll(i,1)-1,pointAll(i,2):pointAll(i,2)+windSize(i,1),k) = rgb(1,k); 44 result(pointAll(i,1):pointAll(i,1)+windSize(i,2),pointAll(i,2)+windSize(i,1)+1,k) = rgb(1,k); 45 result(pointAll(i,1)+windSize(i,2)+1,pointAll(i,2):pointAll(i,2)+windSize(i,1),k) = rgb(1,k); 46 result(pointAll(i,1):pointAll(i,1)+windSize(i,2),pointAll(i,2)+1,k) = rgb(1,k); 47 end 48 end 49 end 50 end 51 end

二:將圖像存入視

 clc ;clear all;close all;

 addpath('./cliffbar');%添加圖像所在路徑,即測試所用圖像序列路徑
  img_dir = dir('./cliffbar/*.png');
  len=length(img_dir);
  aviobj = avifile('cliffbar.avi');%創建一個名為cliffbar的視頻,即生成視頻的名字
  aviobj.Quality = 100;%內調參數,詳細了解可以使用help查看
 start_point=[120,138];%所畫矩形的起始點
   h_w=[38,59];%所畫矩形的長寬

  for i=1:len
     img=imread(img_dir(i).name);
    result=draw_rect(img,start_point,h_w);
    aviobj=addframe(aviobj,uint8(result));  
 end
 aviobj=close(aviobj);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM