【问题标题】:Changing the position of an image inside another image更改图像在另一个图像中的位置
【发布时间】:2015-06-24 15:46:56
【问题描述】:

我需要你的帮助。 我在 Matlab 中工作,我有两张图片,一张尺寸为 256*256,另一张尺寸为 64*64。我想将小图像嵌入到第一个图像中,但我想控制嵌入过程的位置。 例如在大图像的角落里有小图像,然后我想在中间改变它...... 你知道怎么做吗? 谢谢

【问题讨论】:

  • 你打算如何控制仓位?
  • 我正在考虑将小图像替换到左侧、右侧、顶部、底部......但我有点困惑如何去做

标签: image matlab image-processing embed


【解决方案1】:

这是一种使用ginput 的方法,您可以使用该方法选择多个点并获取它们的 x-y 坐标。这里用户选择一个点(所以我们使用ginput(1)),它成为小图像的左上角,放置在大图像的“内部”。我建议将这个确切的代码复制到一个 .m 文件中并使用它。

如果您有任何问题,请提出。

function PlaceImage

clear
clc
close all

%// Create figure and uielements
handles.fig = figure('Position',[440 400 500 230]);

handles.DispButton = uicontrol('Style','Pushbutton','Position',[20 70 80 40],'String','Select point','Callback',@PlaceImageCallback);

%// Set up big and small images
OriginalBigIm = imread('coins.png');

SmallIm = imread('circuit.tif');

SmallIm = imresize(SmallIm,[60 60]);


%// Get size of small image
[heightSmall,WidthSmall] = size(SmallIm);

imshow(OriginalBigIm,[]);


    function PlaceImageCallback(~,~)

        BigIm = OriginalBigIm;

        imshow(OriginalBigIm,[]);

        %// Select a point where to put the top-left corner of the small image
        [xTopLeft,yTopLeft] = ginput(1);

        xTopLeft = round(xTopLeft);
        yTopLeft = round(yTopLeft);

        %// Replace pixels in the big image with the small image
        BigIm(yTopLeft:yTopLeft+heightSmall-1,xTopLeft:xTopLeft+WidthSmall-1) = SmallIm;

        %// Display result
        imshow(BigIm,[]);
    end

end

按下按钮后的样本输出。如果再次按下它,就会出现原始图像,因此您可以根据需要更改小图像的位置。

【讨论】:

  • 那么你有没有尝试我的建议@Youssi?
  • 嗨@Benoit_11,感谢您的帮助,是的,我尝试了您的建议,效果很好。但是你认为这可以与不可见的图像一起使用吗?我的意思是大的看不见的小图像?谢谢
  • 不错不错。如果这有帮助,您可以通过单击旁边的绿色复选标记将其标记为已接受。至于你的问题,是的,我认为这会奏效。尽管我不完全确定您所说的“大上不可见的小图像”是什么意思。能举个例子吗?
  • 我的意思是像一个不可见的标志插入图像中并随着时间改变它的位置
  • 哦,你是说透明图片吗?就像一个我们可以看穿的带有背景的标志?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-06
  • 2012-10-10
  • 2013-05-10
相关资源
最近更新 更多