【问题标题】:Display "imshow" images in a GUI using GUIDE使用 GUIDE 在 GUI 中显示“imshow”图像
【发布时间】:2013-05-29 12:43:15
【问题描述】:

我有一段 300 行长的代码。整个代码中有 3 个不同的 imshow 实例,它们在代码运行时显示数字。 我正在创建的 GUI 将非常简单。目前我有一个启动 m 文件的按钮。 我试图让图像显示在我正在创建的 GUI 中,而不是在单独的图形窗口中。 我一直在看在线教程,但无法快速解决我的问题,它们都有点令人费解,我无法弄清楚到底该怎么做。

我在 GUI 上插入了 3 个轴,在每个轴的“视图回调”中,我可以创建 fcn、deletefcn 和 buttonDownFcn。当我 createFcn 时,它会提示我在自动生成的代码中“将代码放在 OpenFcn 中以填充轴 1”。

我尝试过这样做,但我找不到编写代码的正确位置。

谁能告诉我我走的是正确的方向还是走错了。

谢谢

【问题讨论】:

  • img = imread('peppers.jpg'); image(img, 'Parent', handles.axes1); 怎么样?
  • 感谢您的回复,当我插入以下内容时,它只是给了我一个错误:“评估 uicontrol 回调未定义变量“handles”或函数“handles.axes4”时出错。FullProgram 中的错误(第 37 行) ) imshow(Image); image(Image, 'Parent', handles.axes4) 评估 uicontrol 回调时出错"

标签: matlab user-interface matlab-guide


【解决方案1】:

为了显示这些图像,您需要在 imshow 中声明父级。父级是您想要充当图像画布的对象,在您的情况下将是 axes

我用三个轴和一个按钮创建了一个非常简单的 gui。 MATLAB 将我的坐标区命名为 axes1axes2axes3。 Guide 将句柄保存到这些轴,以便您可以在整个 gui 代码中与它们进行交互。例如,您提到了打开功能...这是我的调用 imshow (我添加的唯一行是最后三行):

% --- Executes just before myGUI is made visible.
function myGUI_OpeningFcn(hObject, eventdata, handles, varargin)

% Choose default command line output for myGUI
handles.output = hObject;

% Update handles structure
guidata(hObject, handles);

% UIWAIT makes myGUI wait for user response (see UIRESUME)
% uiwait(handles.figure1);
imshow('myImage1.png', 'Parent', handles.axes1)
imshow('myImage2.png', 'Parent', handles.axes2)
imshow('myImage3.png', 'Parent', handles.axes3)

请注意,我可以抓住轴的手柄,然后将它们声明为我的imshow 调用结果的父级。

如果您不确定句柄的名称是什么,可以通过右键单击、查看属性检查器和 tag 属性来检查 GUI 编辑器。

如果您想在单击按钮时执行类似的操作,请右键单击编辑器中的按钮,然后单击 View Callbacks -> Callback,您可以在此处添加您的 imshow 代码。

祝你好运。

【讨论】:

  • 这是一个很好的解释,我已经准备好了。它给了我一个错误,因为我的 imshow 输出是 imshow(Image);我怎样才能让 GUI 寻找“图像”而不是像上面详述的“myImage1.png”之类的东西
  • 作为用户,Image变量是如何创建的?
  • 它是一个 imread('sampleImage.jpg'); 的输出在执行过滤和转换之后。
  • 听起来您希望能够在不同回调之间共享转换中的数据。有很多方法可以做到这一点。该视频可能有助于解释它们:blogs.mathworks.com/videos/2011/11/23/…
  • 如果您只需要一些有用的东西,您可以使用save('myFile.mat', Image) 将转换后的图像保存到mat 文件中,然后在需要时再次加载它load('myFile.mat')。请注意,这不是良好的编程习惯,最终应由 MathWorks 推荐的解决方案取代。
【解决方案2】:

如果我理解正确,您只是希望您的图像出现在轴上而不是图形中。在显示图像之前尝试将焦点设置到轴本身。

    axes(1);%you may need to change the one to your axes handle. 
    imagesc(imageToBeDisplayed);

    axes(2);
    imagesc(secondImage);

    axes(3);
    imagesc(thirdImage);

这样,在调用 imagesc 之前,您可以确保您的程序知道将图像发送到哪里。否则它可能只是创建一个图形。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-12
    • 2015-02-01
    • 2017-11-30
    • 2014-09-10
    • 2013-06-08
    • 2012-01-13
    • 1970-01-01
    相关资源
    最近更新 更多