Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 工程数学软件 > MATLAB论坛
MATLAB论坛 一切MATLAB相关问题在此讨论。
 
 
主题工具 显示模式
旧 2009-03-21, 21:47   #1
fantasy
初级会员
 
注册日期: 2009-02-25
年龄: 36
帖子: 2
声望力: 0
fantasy 正向着好的方向发展
默认 [求助]在图像中选取区域,将区域变成黑色

最近碰到一个难题,是这样的:

导师要处理一个2D图像, 因为要交互,需要一个小界面,我弄了一个GUI,在GUI中显示图像,有一块不需要处理,因此,需要将这一块涂黑,可以在图中点几个点,以这几个点顺序可以构造一个多边形,将多边形内部的区域涂黑,就是这么简单,但是显然不能利用外部工具

我试了几种方法,分别说下:
1。对图像中此区域内的点进行处理,利用inpolygon()判断点是否在画的多边形中,然后置换颜色,程序如下:
I = imread('1.jpg');
figure,imshow(I);
hold on;
Number = 0;
x = [];
y = [];
disp('Left mouse button picks points.')
disp('Right mouse button picks last points.')
but = 1;
while but == 1
[xi, yi, but] = ginput(1);
plot(xi,yi);
Number = Number + 1;
x(Number) = xi;
y(Number) = yi;
end

x_min = min(x);
x_max = max(x);
y_min = min(y);
y_max = max(y);

for i=x_min:x_max
for j=y_min:y_max
if (inpolygon(i,j,x,y) == 1)
i_int = int32(i);
j_int = int32(j);
I(j_int,i_int,1) = 0;
I(j_int,i_int,2) = 0;
I(j_int,i_int,3) = 0;
end
end
end

imshow(I);

这种方法基本能实现要求,可以将原图修改掉,但是缺点就是速度太慢

2。用Matlabl里的 fill 函数
Matlab提供了一个fill 函数,可以在图中快速进行多边形填充,使用也简单,但是这样画的多边形怎么保存到原来的文件呢? 因为下一步要继续对原文件进行操作。 我试过saveas,但是保存时总是把figure的边界保存下来了,不符合要求。


所以,各位大侠,帮帮小弟吧,为这个小问题纠结了一天了,还有其他重要的事要做呢,谢谢谢谢

:lovely: :lovely: :lovely: :lovely: :lovely: :lovely: :lovely: :lovely:
fantasy 当前离线   回复时引用此帖
 

主题工具
显示模式

发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛启用 表情符号
论坛启用 [IMG] 代码
论坛禁用 HTML 代码



所有时间均为北京时间。现在的时间是 14:42


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.