我在MATLAB中使用guide
创建了一个GUI。到目前为止,用户可以导入图像并保存图像。我的下一步是允许用户点击图像放置圆形/方形,无论哪个更容易实现。理想情况下,我想这样做,所以创建的最新版本是可撤销的,但基本实现是最重要的。
我假设实际绘制的圆圈使用PLOT会很好,正如其他几个问题中所提到的那样。我不确定的是如何获取鼠标点击图像中的位置然后将PLOT放置在该位置。
修改 这是我目前工作部分的主要代码。
function V1Open_Callback(hObject, eventdata, handles)
% hObject handle to V1Open (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
hMainGui = getappdata(0, 'hMainGui');
fileName = uigetfile('*.jpg');
setappdata(hMainGui, 'fileName', fileName);
updateAxes1
function updateAxes1
hMainGui = getappdata(0, 'hMainGui');
fileName = getappdata(hMainGui, 'fileName');
imshow(imread(fileName))
% --- Executes on button press in V1Save.
function V1Save_Callback(hObject, eventdata, handles)
% hObject handle to V1Save (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
imsave;
答案 0 :(得分:3)
这个问题有点旧,但你可以简单地做到这一点,假设hAxes是图像轴的句柄:
Radius=0.5;
xy1 = get(hAxes,'Currentpoint');
x1 = xy1(1,1);
y1 = xy1(1,2);
Rec=rectangle('Position',[x1-Radius,y1-Radius,2*Radius,2*Radius],'Curvature',[1,1],'HitTest','off');
您可以将半径更改为任何值。 get(hAxes,'Currentpoint')函数检索相对于轴相对点击的最后位置。 '曲率'设置为1,1使矩形成为圆形... 0,0当然会让它成为矩形。
编辑:拼写错误
答案 1 :(得分:2)
您熟悉[x, y] = ginput
吗?这是获得用户点击鼠标位置的基本功能。有关详细信息,请参阅示例here。
您可能还想向我们展示您当前的代码,以便我们能够以更具体的方式回答您的问题!
答案 2 :(得分:0)
我使用图像处理工具箱提供的函数如imellipse和imrect来做到这一点:
有一个按钮,用户可以单击该按钮开始放置椭圆,将其放入图中并允许它们放置椭圆并调整尺寸。一旦他们完成了大小调整,他们可以双击并获得结果。我倾向于存储椭圆对象的句柄及其实际位置。
% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
axes(handles.axes1);
if (isfield(handles, 'ellipse'))
delete(handles.ellipse);
end
handles.ellipse = imellipse();
handles.eps = getPosition(handles.ellipse);
guidata(hObject, handles);