2014-09-02 476 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