查看: 250|回复: 5|关注: 0

[已解决] matlab小白求帮助

[复制链接]

新手

9 麦片

财富积分


050


7

主题

17

帖子

0

最佳答案
用matlab读取一个具体的图片后,如果想对图像进一步处理,使鼠标划过的区域留下线条,并使得线条内图像保留,线条外图像不显示,应该如何用0和1编写一个小的程序实现,请会的朋友帮个忙,谢谢!

论坛优秀回答者

8

主题

1280

帖子

220

最佳答案
  • 关注者: 76
发表于 2018-7-9 16:29:38 | 显示全部楼层
代码来自https://blog.csdn.net/houyanhua1/article/details/78277165

  1. % 窗体打开前,先执行该函数
  2. function UI_line_OpeningFcn(hObject, eventdata, handles, varargin)

  3. handles.output = hObject;
  4. global ButtonDown pos1;  %声明全局变量
  5. ButtonDown=[];   %标记鼠标是否已经按下。1表示按下,否则表示鼠标未按下
  6. pos1=[];   %存放鼠标的临时位置
  7. guidata(hObject, handles);


  8. % 鼠标按下时执行该函数
  9. function figure1_WindowButtonDownFcn(hObject, eventdata, handles)

  10. global ButtonDown pos1;
  11. if strcmp(get(gcf,'SelectionType'),'normal')   %如果按下的是左键。strcmp判断字符串是否相同
  12. ButtonDown=1;  %标记鼠标已经按下
  13. pos1=get(handles.axes1,'CurrentPoint');   %临时存放鼠标的当前位置
  14. set(handles.text2,'String',num2str(pos1(1,1)));
  15. end


  16. % 鼠标移动时,执行该函数
  17. function figure1_WindowButtonMotionFcn(hObject, eventdata, handles)

  18. global ButtonDown pos1;
  19. if ButtonDown==1   %如果鼠标已经按下
  20.     pos=get(handles.axes1,'CurrentPoint');   
  21.     line([pos1(1,1) pos(1,1)],[pos1(1,2) pos(1,2)],'LineWidth',4);  %画直线, pos是一个一行二列的矩阵,pos(1,1)表示矩阵的第一行第一列的元素。
  22.     pos1=pos;  %更新鼠标的临时位置
  23. end


  24. % 鼠标松开时,执行该函数
  25. function figure1_WindowButtonUpFcn(hObject, eventdata, handles)

  26. global ButtonDown pos1;  %鼠标松开后,初始化这两个全局变量
  27. ButtonDown=[];
复制代码


你把获取的路径imfill之后就是二值图了。然后和原图相乘就能保留圈中的区域。
兴趣是最好的导师——让Matlab入门从游戏开始
http://www.ilovematlab.cn/thread-546885-1-1.html

新手

9 麦片

财富积分


050


7

主题

17

帖子

0

最佳答案
 楼主| 发表于 2018-7-9 16:53:39 | 显示全部楼层
悟得 发表于 2018-7-9 16:29
代码来自https://blog.csdn.net/houyanhua1/article/details/78277165

非常感谢!但是我要实现的好像不用这么麻烦吧,我想实现的是,比如I=imread('cameraman.tif');imshow(I)然后我想提取某一部分图像,如何用鼠标划线提取,应该如何设计程序,谢谢啦

论坛优秀回答者

8

主题

1280

帖子

220

最佳答案
  • 关注者: 76
发表于 2018-7-9 16:57:16 | 显示全部楼层 |此回复为最佳答案
weixn123- 发表于 2018-7-9 16:53
非常感谢!但是我要实现的好像不用这么麻烦吧,我想实现的是,比如I=imread('cameraman.tif');imshow(I) ...

你如果想截图那种方形的。可以直接用
  1. [x,y]=ginput(2)
复制代码

点击要获取位置的两个对角,提取这个长方形里的像素就行了。
兴趣是最好的导师——让Matlab入门从游戏开始
http://www.ilovematlab.cn/thread-546885-1-1.html

新手

9 麦片

财富积分


050


7

主题

17

帖子

0

最佳答案
 楼主| 发表于 2018-7-9 17:06:20 | 显示全部楼层
悟得 发表于 2018-7-9 16:57
你如果想截图那种方形的。可以直接用

点击要获取位置的两个对角,提取这个长方形里的像素就行了。 ...

谢谢!如果是任意形状呢,除了用roipoly函数,能用别的程序实现吗?

论坛优秀回答者

8

主题

1280

帖子

220

最佳答案
  • 关注者: 76
发表于 2018-7-9 17:47:56 | 显示全部楼层
weixn123- 发表于 2018-7-9 17:06
谢谢!如果是任意形状呢,除了用roipoly函数,能用别的程序实现吗?

任意形状可以用鼠标拖拽响应来完成。圈好的路径用imfill填充之后还是二值图。就可以处理了
兴趣是最好的导师——让Matlab入门从游戏开始
http://www.ilovematlab.cn/thread-546885-1-1.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /3 下一条

快速回复 返回顶部 返回列表