Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image 在用户指定的图像上绘制圆/正方形_Image_Matlab_Draw - Fatal编程技术网

Image 在用户指定的图像上绘制圆/正方形

Image 在用户指定的图像上绘制圆/正方形,image,matlab,draw,Image,Matlab,Draw,我在MATLAB中使用guide创建了一个GUI。到目前为止,用户可以导入图像并保存图像。我的下一步是允许用户点击图像来放置一个圆/正方形,不管是哪个,都是更容易实现的。理想情况下,我希望这样做,最新创建的一个是可撤销的,但基本实现是至关重要的 我假设实际绘制圆时,使用PLOT会很好,如其他几个问题中所述。我不确定的是,我将如何在鼠标单击的图像中获取位置,然后将绘图放置在该位置 编辑: 下面是我目前为工作部件编写的主要代码 function V1Open_Callback(hObject, e

我在MATLAB中使用
guide
创建了一个GUI。到目前为止,用户可以导入图像并保存图像。我的下一步是允许用户点击图像来放置一个圆/正方形,不管是哪个,都是更容易实现的。理想情况下,我希望这样做,最新创建的一个是可撤销的,但基本实现是至关重要的

我假设实际绘制圆时,使用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;

您是否熟悉
[x,y]=ginput
?这是获取用户单击鼠标位置的基本功能。有关更多详细信息,请参见示例


您可能还想向我们展示您当前的代码,以便我们能够以更具体的方式回答您的问题

您熟悉
[x,y]=ginput
吗?这是获取用户单击鼠标位置的基本功能。有关更多详细信息,请参见示例


您可能还想向我们展示您当前的代码,以便我们能够以更具体的方式回答您的问题

我使用图像处理工具箱提供的函数(如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);

我使用图像处理工具箱提供的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);

这个问题有点老了,但您可以简单地这样做,假设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将使其成为矩形


编辑:输入错误这个问题有点老了,但你可以简单地这样做,假设哈克斯是你图像轴的手柄:

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将使其成为矩形


编辑:打字输入

您好,谢谢您的回复,我们已经添加了上述代码的主要部分。我对MATLAB不太熟悉。您好,谢谢您的回复,我已经添加了上面代码的主要部分。我对MATLAB不熟悉,所以不太熟悉。