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 如何显示我徒手画的所有线条_Image_Matlab_Image Processing - Fatal编程技术网

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');
逻辑“或”操作(即
|
)在循环并创建新的笔划时,使用每个笔划更新掩码。当我进行上述修改时,我现在在保存之前尝试复制您的笔划时得到了以下图像:


我的荣幸!祝你好运