更改图像的一部分

时间:2018-01-02 22:58:48

标签: image matlab

在MATLAB中更改后,如何粘贴部分图片?我把这个盘子从汽车的这个图像上剪下来,现在我想把它自动放回去。这些板仍然与它们最初的坐标相同,但背景都是黑色的。

我要贴上的车:

Car

这就是我要粘贴的内容:

to paste

这是我的代码,我想改变我需要手工绘制的部分。

fontSize = 20;
format compact;

baseFileName1 = 'blurr_plate.jpg';
baseFileName2 = 'car2.jpg';

sourceImage = imread(baseFileName1);
subplot(1, 2, 1);
imshow(sourceImage);
axis on;
caption = sprintf('Source image, %s', baseFileName1);
title(caption, 'FontSize', fontSize, 'Interpreter', 'none');

% Enlarge figure to full screen.
set(gcf, 'units','normalized','outerposition',[0 0 1 1]);
% Give a name to the title bar.
set(gcf,'name','Demo by ImageAnalyst','numbertitle','off')

targetImage = imread(baseFileName2);
subplot(1, 2, 2);
imshow(targetImage);
axis on; 
caption = sprintf('Target image, %s, original', baseFileName2);
title(caption, 'FontSize', fontSize, 'Interpreter', 'none');

% Ask user to draw freehand mask.
message = sprintf('In the LEFT IMAGE...\nLeft click and hold to begin drawing.\nSimply lift the mouse button to finish');
subplot(1, 2, 1);
uiwait(msgbox(message));
hFH = imfreehand(); % Actual line of code to do the drawing.
% Create a binary image ("mask") from the ROI object.
mask = hFH.createMask();
xy = hFH.getPosition;

% Paste it onto the target image.
targetImage(mask) = sourceImage(mask);

% Display new image.
subplot(1, 2, 2); % Switch active axes to right hand axes.
imshow(targetImage);
imwrite(targetImage, 'car_new.jpg')
axis on;
caption = sprintf('Target image, %s, after paste', baseFileName2);
title(caption, 'FontSize', fontSize, 'Interpreter', 'none');

1 个答案:

答案 0 :(得分:0)

只有当源图像和目标图像都是灰度时,您的代码才有效。当您的目标图像被着色时,请进行以下更改:

删除第35,36和41行。

在第33行之后粘贴此代码。

    redChannel = targetImage(:, :, 1);
    greenChannel = targetImage(:, :, 2);
    blueChannel = targetImage(:, :, 3);
    redChannel(mask) = sourceImage(mask);
    greenChannel(mask) = sourceImage(mask);
    blueChannel(mask) = sourceImage(mask);
    targetImage = cat(3, redChannel, greenChannel, blueChannel);