我想要的只是在我选择的半径和中心的图像中添加一个圆圈,但是我不想使用绘图命令,我想要一个新的输出数组,其中包含我选择的图像和圆圈。 这是我的功能
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
答案 0 :(得分:0)
我非常确定有更好的方法,但按照您的方法,您可以使用以下代码:
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个像素),这对于大型图片来说可能不够。见下面的例子。此外,对于大图片,您可能需要更精细的discritization,即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
作为灰度值。