Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image 在Matlab中改变图像画布的大小_Image_Matlab_Image Processing - Fatal编程技术网

Image 在Matlab中改变图像画布的大小

Image 在Matlab中改变图像画布的大小,image,matlab,image-processing,Image,Matlab,Image Processing,我在画布/人物中有一张照片,我希望在不调整照片大小的情况下增加画布/人物的高度和宽度(例如,在更大的“画布”中显示图像)。我怎么做 谢谢。借用路易斯·门多在上述评论中的回答,使用。您可以这样称呼它,因为您的图像存储在im: out = padarray(im, [rows cols], padval, 'both'); 行和列确定要在图像中填充的像素边框,这与两者标志一致padval是增加画布大小时要放置在边框上的值。您可以选择任何符合图像类型的值。例如,您可以对黑色执行0,对白色执行255,

我在画布/人物中有一张照片,我希望在不调整照片大小的情况下增加画布/人物的高度和宽度(例如,在更大的“画布”中显示图像)。我怎么做


谢谢。

借用路易斯·门多在上述评论中的回答,使用。您可以这样称呼它,因为您的图像存储在
im

out = padarray(im, [rows cols], padval, 'both');
确定要在图像中填充的像素边框,这与
两者
标志一致
padval
是增加画布大小时要放置在边框上的值。您可以选择任何符合图像类型的值。例如,您可以对黑色执行
0
,对白色执行
255
,对灰色执行
128
等等。例如,如果要为行设置10像素宽的边框,为列设置5像素宽的灰色边框,请执行以下操作:

out = padarray(im, [10 5], 128, 'both');
下面是在存储在MATLAB系统路径中的
onion.png
图像中加载的示例:

im = imread('onion.png');
out = padarray(im, [10 5], 128, 'both');
imshow(out);
这就是我得到的:

如您所见,在图像开始之前(顶部)和之后(底部),用10像素的灰色边框填充图像的行。类似地,在图像开始之前(左)和之后(右),用5像素的灰色边框填充图像的列


只需根据需要调整行、列和灰度强度。

借用Luis Mendo在上述评论中的答案,使用。您可以这样称呼它,因为您的图像存储在
im

out = padarray(im, [rows cols], padval, 'both');
确定要在图像中填充的像素边框,这与
两者
标志一致
padval
是增加画布大小时要放置在边框上的值。您可以选择任何符合图像类型的值。例如,您可以对黑色执行
0
,对白色执行
255
,对灰色执行
128
等等。例如,如果要为行设置10像素宽的边框,为列设置5像素宽的灰色边框,请执行以下操作:

out = padarray(im, [10 5], 128, 'both');
下面是在存储在MATLAB系统路径中的
onion.png
图像中加载的示例:

im = imread('onion.png');
out = padarray(im, [10 5], 128, 'both');
imshow(out);
这就是我得到的:

如您所见,在图像开始之前(顶部)和之后(底部),用10像素的灰色边框填充图像的行。类似地,在图像开始之前(左)和之后(右),用5像素的灰色边框填充图像的列


只需根据需要调整行、列和灰度强度。

如果您需要MATLAB图形格式,可以通过将轴的
'units'
参数设置为
'normalized'
以外的值(例如
'pixels'
)来锁定图形中的图像大小。将其与图形的“ResizeRcn”相结合,以自动重新定位轴与图像,并且在调整图形大小时,图像保持居中且大小相同

holdimg.m

function holdimg(ha)
% Hold axis/image size and centering in the figure. Input ha is the axis handle.
assert(strcmpi(get(ha,'Type'),'axes'))

set(ha,'Units','pixels');
pa = get(gca,'pos'); sz = pa(3:4);
set(ancestor(ha,'figure'),'ResizeFcn',@axResizeFn);

    function axResizeFn(varargin)
        pf = get(varargin{1},'pos'); % varargin{1} is figure handle
        set(ha,'pos',[(pf(3:4)-sz)/2 sz])
    end

end
用法

>> imshow(imread('cameraman.tif'))
>> % now manually resize the image (via figure size) to desired size
>> holdimg(gca) % lock image size
>> % now resize figure, image stays centered and constant size

如果您正在使用MATLAB图形格式,可以通过将轴的
'units'
参数设置为
'normalized'
以外的值(例如
'pixels'
)来锁定图形中的图像大小。将其与图形的“ResizeRcn”相结合,以自动重新定位轴与图像,并且在调整图形大小时,图像保持居中且大小相同

holdimg.m

function holdimg(ha)
% Hold axis/image size and centering in the figure. Input ha is the axis handle.
assert(strcmpi(get(ha,'Type'),'axes'))

set(ha,'Units','pixels');
pa = get(gca,'pos'); sz = pa(3:4);
set(ancestor(ha,'figure'),'ResizeFcn',@axResizeFn);

    function axResizeFn(varargin)
        pf = get(varargin{1},'pos'); % varargin{1} is figure handle
        set(ha,'pos',[(pf(3:4)-sz)/2 sz])
    end

end
用法

>> imshow(imread('cameraman.tif'))
>> % now manually resize the image (via figure size) to desired size
>> holdimg(gca) % lock image size
>> % now resize figure, image stays centered and constant size


为什么不直接在图像上填充一个(或NaN)?请参见
padarray
Hi,您能否结合imread提供我的示例。谢谢。如果你发布(一个最小的子集)你的代码,然后有人(我或其他人)可以添加填充,那就更好了。例如:您的图像是作为RBG图像(MxNx3数组)还是索引图像(MXN数组和彩色贴图)读取的?@rayryeng只是停留了一会儿!顺便说一句,我刚刚注意到你的一个“很好的回答”。)@chappjc嘿!来吧,别让我们乞求。。。留下来!:-)为什么不直接在图像上填充一个(或NaN)?请参见
padarray
Hi,您能否结合imread提供我的示例。谢谢。如果你发布(一个最小的子集)你的代码,然后有人(我或其他人)可以添加填充,那就更好了。例如:您的图像是作为RBG图像(MxNx3数组)还是索引图像(MXN数组和彩色贴图)读取的?@rayryeng只是停留了一会儿!顺便说一句,我刚刚注意到你的一个“很好的回答”。)@chappjc嘿!来吧,别让我们乞求。。。留下来!:-)回答得好!(虽然OP没有表现出很大的努力…@LuisMendo-我无法抗拒任何与图像处理相关的事情…:(笑。几天前我回复了一篇帖子,其中有人想模仿
bwlabel
,而不使用内置函数。他们没有表现出任何努力,但我还是写了代码……这也是一个很好的实践!……谢谢:)是的,人们确实从这些东西中学到了东西。这是一个重要的奖励@rayryeng谢谢,我想把你的好答案改成符合一般情况的。例如,我的图像有宽度和高度,我希望将画布的尺寸增加到widthMax和heightMax。因此,我使用了w=ceil((widthMax-width))和h=ceil((heightMax-height))以及img1=padarray(img,[w-h],128,'both'),但它不起作用。有什么线索吗?@user2916044-为什么不起作用?您的
widthMax
heightMax
width
height
的值是多少?从你的语法判断,它应该是有效的。我猜你的几个变量是不对的。顺便说一句,您需要将其更改为
[hw]
而不是
[hh]
。填充的行数必须排在第一位,列数紧跟其后。回答得好!(