我如何删除gui的作物马克吗?
1视图(30天)
显示旧的评论
嗨,我有一个GUI中的作物按钮,我可以单击按钮然后作物图像显示在轴。如何删除作物如果我想再次recrop马克?我想清晰图像中的作物马克如果有任何一旦我点击按钮。
函数BtnCrop_Callback (hObject eventdata处理)
句柄。输出= hObject;
句柄。currentAxes =得到(handles.Axes,“孩子”);
如果isempty (handles.currentAxes) = = false
promptMesg = sprintf (“你确定作物的形象?”);
按钮= questdlg (promptMesg,“作物图像”,“是的”,“不”,“是的”);
如果strcmpi(按钮,“是的”)
句柄。k = waitforbuttonpress;
point1 =得到(gca,“CurrentPoint”);
handles.finalRect= rbbox;
卷帘窗=得到(gca,“CurrentPoint”);
point1 = point1 (1:2);
卷帘窗=卷帘窗(1:2);
p1 = min (point1、卷帘窗);
抵消= abs (point1-point2);
handles.x= round([p1(1) p1(1)+offset(1) p1(1)+offset(1) p1(1) p1(1)]);
handles.y= round([p1(2) p1(2) p1(2)+offset(2) p1(2)+offset(2) p1(2)]);
句柄。cropSuccess = true;
持有在
轴手册
情节(handles.x handles.y);
%(2)暂停
%删除(hPlot);
其他的
句柄。cropSuccess = false;
结束
其他的
errordlg (“没有选择形象!”);
结束
guidata (hObject处理);
的
删除(hPlot)
我试着不是我想要的。我想要的是我每次单击按钮,它会检查是否有作物图像中标记,如果有,那么它将被删除(处理。x和hanles。y还将被删除);如果不是,那么我就可以开始新的种植。
非常感谢。
0评论
接受的答案
杰夫•海斯
2014年6月19日
你几乎拥有它——你只需要分配处理的作物面积
处理
对象,然后这个更新(处理)应用程序数据存储,将下次用户按下按钮。
如果用户按下
作物
按钮,选择
是的
,然后选择一个区域在图像代码
情节(handles.x handles.y);
就变成了
%保存处理周围的矩形区域的图像
%,裁剪
句柄。hCropRect =情节(handles.x handles.y);
%更新应用程序数据存储
guidata (hObject处理);
我们有一个处理的矩形区域裁剪。你想要这个矩形当用户按下删除
作物
按钮,所以我们可以做以下的第一行按钮回调(在你的上面
如果
声明中,或作为第一行中
如果
块)
%检查处理对象hCropRect字段
如果isfield(处理,“hCropRect”);
%删除只有非空
如果~ isempty (handles.hCropRect)
删除(handles.hCropRect);
%的处理来表示,它已被删除
句柄。hCropRect = [];
x和y %明显
handles.x= [];
handles.y= [];
%更新应用程序数据存储
guidata (hObject处理);
结束
结束
试着上面,看看会发生什么!
我注意到你的代码没有
guidata (hObject,处理)
命令——你如何能够访问
handles.x
,
handles.y
,
handles.finalRect
这个函数外的吗?
答案(1)
图像分析
2014年6月19日
我没有看到任何裁剪。没有索引,没有调用imcrop(),什么都没有。使用hPlot处理你绘制的线,然后删除处理会把你画的线从图像。它将
不
把x和y字段从处理像你说。x和y领域依然存在,尽管叠加的盒子不见了。
你应该把删除(hPlot)
之前
调用图:
如果存在(“hPlot”,“var”)
删除(hPlot);
结束
hPlot =情节(处理。x, handles.y)
croppedImage = imcrop (originalImage之下,handles.finalRect);