Image 如何显示我徒手画的所有线条
我使用的代码允许我在图像上徒手绘制。代码如下:Image 如何显示我徒手画的所有线条,image,matlab,image-processing,Image,Matlab,Image Processing,我使用的代码允许我在图像上徒手绘制。代码如下: I = imread('peppers.png'); imshow(I); for i=1:3 M = imfreehand(gca,'Closed',0); F = false(size(M.createMask)); end P0 = M.getPosition; D = round([0; cumsum(sum(abs(diff(P0)),2))]); P = interp1(D,P0,D(1):.5:D(end)); P
I = imread('peppers.png');
imshow(I);
for i=1:3
M = imfreehand(gca,'Closed',0);
F = false(size(M.createMask));
end
P0 = M.getPosition;
D = round([0; cumsum(sum(abs(diff(P0)),2))]);
P = interp1(D,P0,D(1):.5:D(end));
P = unique(round(P),'rows');
S = sub2ind(size(I),P(:,2),P(:,1));
F(S) = true;
figure;
imshow(F);
imwrite(F,'line.jpg')
图1
图2
使用上面的代码,我可以在照片上随心所欲地画(图1)。但在输出图(图2)中,它只显示了我绘制的最后一个图。我想展示我画的所有徒手画的人物。有谁能建议我如何改进代码,这样无论我在pic1上画什么,都会显示在pic2上。谢谢 这只是循环结束的问题(即
end
语法),因此每次迭代后都要设置掩码。取而代之的是捕获所有笔划,但您正在重置包含每次迭代笔划的掩码。因此,您只捕获最后一次迭代的笔划
您需要修复此问题,一旦修复,您还需要一个外部掩码变量,在创建每个笔划时记住,然后这是最终保存的掩码变量
我对您的代码所做的编辑如下所示:
close all;
I = imread('peppers.png');
figure;
imshow(I);
%// New - Create external mask variable that remembers each stroke in the loop
mask = false(size(I,1), size(I,2));
for i=1:3
M = imfreehand(gca,'Closed',0);
F = false(size(M.createMask));
P0 = M.getPosition;
D = round([0; cumsum(sum(abs(diff(P0)),2))]);
P = interp1(D,P0,D(1):.5:D(end));
P = unique(round(P),'rows');
S = sub2ind(size(I),P(:,2),P(:,1));
F(S) = true;
%// Save stroke into external mask
mask = mask | F;
end %// Move end statement here
%// Show mask then save
figure;
imshow(mask);
imwrite(mask,'line.jpg');
逻辑“或”操作(即|
)在循环并创建新的笔划时,使用每个笔划更新掩码。当我进行上述修改时,我现在在保存之前尝试复制您的笔划时得到了以下图像:
我的荣幸!祝你好运