【问题标题】:How to declare static and global variable in MATLAB如何在 MATLAB 中声明静态变量和全局变量
【发布时间】:2015-02-05 04:31:34
【问题描述】:

我正在使用增加和减少图像的清晰度和对比度的功能,但问题是我必须从函数中获取增加或减少的清晰度或对比度值的值才能重用这些值。当在 GUI 中单击按钮时,会发生增加和减少锐度或对比度的功能。请帮助我使用和声明将在应用程序中使用的静态和全局变量。

主 GUI 文件

function varargout = Cotton_Disease_Detector(varargin)
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
                   'gui_Singleton',  gui_Singleton, ...
                   'gui_OpeningFcn', @Cotton_Disease_Detector_OpeningFcn, ...
                   'gui_OutputFcn',  @Cotton_Disease_Detector_OutputFcn, ...
                   'gui_LayoutFcn',  [] , ...
                   'gui_Callback',   []);
if nargin && ischar(varargin{1})
    gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
    [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
    gui_mainfcn(gui_State, varargin{:});
end

function Cotton_Disease_Detector_OpeningFcn(hObject, eventdata, handles, varargin)
axes(handles.axes1);
axis off 
axes(handles.axes4);
axis off 
axes(handles.axes5);
axis off
axes(handles.axes6);
axis off 
handles.output = hObject;
guidata(hObject, handles);

function varargout = Cotton_Disease_Detector_OutputFcn(hObject, eventdata, handles) 
varargout{1} = handles.output;

function browse_Callback(hObject, eventdata, handles)
image=browseImage();
imshow(image,'Parent',handles.axes1)

function segmentation_image_Callback(hObject, eventdata, handles)
image = imread('enhance.jpg');
image=imageSegmentation(image);
imshow(image,'Parent',handles.axes5);

function enhance_image_Callback(hObject, eventdata, handles)
image=imread('resize.jpg');
set(handles.enhancementPanel,'Visible','On')
image=imageEnhancement(image);
imwrite(image,'enhance.jpg');
imshow(image,'parent',handles.axes4);

function classification_image_Callback(hObject, eventdata, handles)

function feature_extraction_image_Callback(hObject, eventdata, handles)

function decreaseContrast_Callback(hObject, eventdata, handles)
image=imread('enhance.jpg');
[J,x]=decreaseContrast(image,x);
imwrite(J,'enhance.jpg');
imshow(J,'parent',handles.axes4);

function increaseContrast_Callback(hObject, eventdata, handles)
image=imread('enhance.jpg');
[J,x]=increaseContrast(image,x);
imwrite(J,'enhance.jpg');
imshow(J,'parent',handles.axes4);

function decreaseSharpness_Callback(hObject, eventdata, handles)
image=imread('enhance.jpg');
[J,x]=decreaseSharpness(image,x);
imwrite(J,'enhance.jpg');
imshow(J,'parent',handles.axes4);

function increaseSharpness_Callback(hObject, eventdata, handles)
image=imread('enhance.jpg');
[J,x]=increaseSharpness(image,x);
imwrite(J,'enhance.jpg');
imshow(J,'parent',handles.axes4);

function resizeImage_Callback(hObject, eventdata, handles)
image=imread('read.jpg');
image=resizeImage(image);
imwrite(image,'resize.jpg');

增加锐度的功能

function [image,x]  = increaseSharpness(image,x)
if isempty(x)
    x=0.2;
end
x=x+0.2;
image=imsharpen(image,'radius',2,'Amount',x);
end

锐度降低功能

function [image,x]  = decreaseSharpness(image,x)
if isempty(x)
    x=0.2;
end
x=x-0.2;
image=imsharpen(image,'radius',2,'Amount',x);
end

增加减少对比度的功能与锐度相同。

【问题讨论】:

  • 我删除了图像处理标签,因为您的帖子更关注 GUI 机制而不是处理图像。

标签: matlab


【解决方案1】:

Matlab 提供了直接在 GUI 对象上存储数据的方法,而不是使用全局变量。

This page 对这些方法有很好的概述。

在调用之间共享数据的最合适方式是使用setappdata(hObject, name, value) 将值存储在您的GUI 对象上并使用getappdata(hObject, name) 检索它们。

另一种方法是使用guidata(hObject, data) 函数,允许您存储单个变量或结构。但是 GUIDE GUI 使用这个函数来存储句柄对象,所以首选 setappdata 方法。

[根据@Hoki 的评论编辑]

【讨论】:

  • guidata 最好留给handles 类型的对象。要在您的 GUI 子函数中传递其他类型的数据,setappdatagetappdata 是更好的选择。
  • @Hoki 是的,我明白了,基本上是让您将名称-值对存储在句柄对象上。更加灵活。
猜你喜欢
  • 1970-01-01
  • 2019-02-13
  • 2011-06-22
  • 1970-01-01
  • 2022-01-28
  • 1970-01-01
  • 2014-10-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多