我想要的只是在一个半径和中心选定的图像中添加一个圆,但是我不想使用图COMMAND,我想要一个新的输出数组,上面有我选择的图像和圆。这是我的功能
function [ out_image ] = draw_circle( in_image,x0,y0,r,value)
其中in_image是输入图像x0 y0圆心,r半径值图像的强度
这是我的尝试,不起作用
ang=0:pi/100:2*pi
x=r*cos(ang)+x0;
y=r*sin(ang)+y0;
cir=[x,y];
[j,k]=size(cir);
for cir=1:j
for cir=1:k
if cir(i,j)==0
out_image(i,j)=in_image(i,j);
end
end
end
imshow(out_image)
end
我很确定有更好的方法,但是按照您的方法,您可以使用以下代码:
out_image = in_image;
cir = round([r*cos(ang)+x0;r*sin(ang)+y0]);
for i = 1:size(cir,2)
out_image(cir(1,i),cir(2,i),:) = 255;
end
您的for循环与您编写循环的方式不同。另外,您应该使用round来获取索引,而不是浮点值。但是,圆圈很小(仅1个像素),对于大图片而言可能还不够。请参见下面的示例。另外,对于大图片,您可能需要更好的区分度,即中的大量元素ang
。
如果您想要更大的线宽,可以使用
lw = 3; % Enter linewidth here
for i = 1:size(cir,2)
out_image(cir(1,i)+(-lw:lw),cir(2,i)+(-lw:lw),:) = 255;
end
编辑:万一您看不到它。该圆靠近左上角。
该功能的完整代码为:
function [ out_image ] = draw_circle( in_image,x0,y0,r,value,lw)
out_image = in_image;
ang = 0:pi/100:2*pi;
cir = round([r*cos(ang)+x0;r*sin(ang)+y0]);
for i = 1:size(cir,2)
out_image(cir(1,i)+(-lw:lw),cir(2,i)+(-lw:lw),:) = value;
end
imshow(out_image)
您可以使用以下命令从命令行调用它
draw_circle(in_image,100,200,50,0,3);
注意,我将未使用的value
值作为灰度值。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句