2014-09-02 32 views
-1

我有一些圖片A 和大小MaxH*MaxW(如例如800 * 600) 畫面尺寸越小, 我想添加黑色邊框,在代碼中的圖片大小會後800 * 600黑色邊框的圖像添加在MATLAB

我想類似的東西:

function [ output_args ] = t(A) 
im=imread(A); 
global MaxH; 
global MaxW; 
global Max; 

[rowsA colsA numberOfColorChannelsA] = size(im); 
% Get size of existing image B. 
% See if lateral sizes match. 
if MaxH ~= rowsA || MaxW ~= colsB 
% Size of B does not match A, so resize B to match A's size. 
% imresize(A, [MaxH MaxW Max]); 
d=padarray(A,[(MaxW-size(im,1))/2 (MaxH-size(im,2))/2]); 
imwrite(d,A); 
end 


end 

    **edit** 

function [ output_args ] = Resize(A) 
%TT Summary of this function goes here 
% Detailed explanation goes here 
im=imread(A); 
global MaxH; 
global MaxW; 
global Max; 

[H W N] = size(im); 

    y=floor((MaxH-H)/2); 
    x=floor((MaxW-W)/2); 

    d=padarray(im,[y x]); 

d= imresize(d,[MaxH MaxW]); 
imwrite(d,A); 


end 

TNX所有

+1

是否要調整大小或添加黑色邊框?兩件不同的事情。 – Divakar 2014-09-02 13:25:45

+0

你試圖用這個函數't'實現什麼功能? – Divakar 2014-09-02 14:13:29

+0

@Divakar我想添加黑色邊框 – 2014-09-02 14:20:48

回答

0

如果有一個圖像A,可以在所希望的大小創建零矩陣NewImage,然後在那裏插入(中心)的圖像。 它看起來somethign這樣的:

ImSize=size(A); 
NewImage=zeros(MaxH,MaxW); %or was it zeros(MaxW,MaxH)? 
NewImage(round((MaxH-ImSize(1))/2):round(MaxH-(MaxH-ImSize(1))/2)-1,... 
     (round(MaxW-ImSize(2))/2):round(MaxW-(MaxW-ImSize(2))/2)-1)=A; 
+0

親愛frie第二...此代碼給我寫信_Warning:作爲指數 _和圖片時使用整數操作數所需要的冒號操作,他讓我的黑色邊框,並在中間的一些白色像素 – 2014-09-02 14:04:39

+0

當「歸零」你NewImage ,你可能想要聲明它爲uint8或uint16。這應該解決這個問題。例如:零點(MaxH,MaxW,'uint8') – 2014-09-02 14:11:39

+0

@ uint8中的Benoit_11 - 它們做同樣的事情。在uint16我得到一個錯誤**錯誤使用writejpg> set_jpeg_props(line 184) UINT16圖像數據要求bitdepth專門設置爲12或16. 寫入錯誤(第50行) props = set_jpeg_props(data,varargin { }); imwrite中的錯誤(第473行) feval(fmt_s.write,data,map,filename,paramPairs {:}); t錯誤(第20行) imwrite(NewImage,A); ** – 2014-09-02 14:17:31

2

假設你要添加黑色邊框,而無需實際調整圖像大小,這是一個使用padarray從圖像處理工具箱的實現 -

padarray(im,[(800-size(im,1))/2 (600-size(im,2))/2]) 

,其中im是您的輸入圖像數據。


編輯:所以這是一個修正的問題,你的代碼,並有在它使用了一些不那麼首選的作業,我仍然保留,以便使其到達工作至少在你的最終 -

function [ output_args ] = func100(A) 
im=imread(A); 
global MaxH; 
global MaxW; 
global Max; 

[rowsA colsA numberOfColorChannelsA] = size(im); 
% Get size of existing image B. 
% See if lateral sizes match. 
if MaxH > rowsA & MaxW > colsA 
    % Size of B does not match A, so resize B to match A's size. 
    % imresize(A, [MaxH MaxW Max]); 
    d=padarray(im,[(MaxW-size(im,1))/2 (MaxH-size(im,2))/2]); 
else 
    d = imresize(im,[MaxW MaxH]); 
end 
imwrite(d,A); 

output_args = true; 

end

+0

@Divkar它給我寫了一個錯誤**錯誤使用padarray> ParseInputs(188行) 函數padarray期望A(參數1)是數字或邏輯的持續填充。 padarray中的錯誤(line 65) [a,method,padSize,padVal,direction] = ParseInputs(varargin {:}); NewImage = padarray(A,[(MaxW-size(im,1))/ 2(MaxH-size(im,2))/ 2]); ** – 2014-09-02 14:22:45

+0

@SEBASTIANLOTuS查看編輯後的代碼! – Divakar 2014-09-02 15:01:50

+0

它總是給我寫同樣的錯誤**錯誤使用padarray 預期輸入數字2,PADSIZE,是非負的。 錯誤padarray> ParseInputs(線145) validateattributes(padSize,{ '雙重'},{ '真實' '載體' 'nonnan' '非負' ... 錯誤padarray(線65) [一,方法,padSize,padVal,方向] = ParseInputs(varargin {:}); 錯誤TT(第16行) d = padarray(1M,[YX]); 錯誤視頻(線34) TT (file_name1); 錯誤FramesRotate(線35) 視頻(); 錯誤rotationGUI> ok_Callback(線65) FramesRotate(); 錯誤而EVAL uating uicontrol回撥 >> ** – 2014-09-03 10:09:56