Вопрос относительно области действия моей глобальной переменной {matlab} - PullRequest
0 голосов
/ 16 марта 2020

Gui Я пытаюсь выполнить задание для моего класса, и нажатие кнопки отмены должно перезагрузить предыдущее преобразование, примененное к изображению в случае, если я вернусь sh к go назад. Переменная golabal определяется в начале кода enter image description here

function LoadimgBtn_Callback(hObject, eventdata, handles)
% hObject    handle to LoadimgBtn (see GCBO)
[filename,pathname]=uigetfile('C:\Users\hassan\Desktop\DIP PROJECT IMGS\MonoChrome 
Images\*.jpg;*.png;*.jpeg');
file_path=strcat(pathname,filename);
og_img=imread(file_path);
axes(handles.org_img);
imshow(og_img);
prev_img=og_img;
axes(handles.intr_img);
imshow(prev_img);

Как уже отмечалось, глобальная переменная prev_img прекрасно описывается здесь, однако, когда я пытаюсь использовать ту же самую переменную в моем Код отмены: выдается ошибка, что переменная не существует.

function UndoBtn_Callback(hObject, eventdata, handles)

axes(handles.intr_img);

imshow(prev_img);

Error

I * sh, чтобы использовать эту переменную через метод глобальной переменной.

Ответы [ 2 ]

2 голосов
/ 16 марта 2020

вам нужно снова вызвать глобальную переменную в коде вашей функции

function UndoBtn_Callback(hObject, eventdata, handles)

axes(handles.intr_img);
global prev_img % declaring a global variable "again"
imshow(prev_img);

В противном случае вы перекрываете глобальную переменную локальной переменной с тем же именем. (помните, что вы также можете определить функцию с тем же именем, что и функция matlab, например, sum.) Дело в том, что matlab не знает, что вы хотите, чтобы переменная была глобальной. То же самое верно для постоянных переменных. Как только вы определили глобальную переменную в своей функции, matlab проверяет, существует ли эта (глобальная) переменная и имеет ли она уже значение. Возможно, вы захотите взглянуть на matlab-docs , если мое объяснение не было достаточно интуитивно понятным.

Чтобы очистить глобальную переменную, вам нужно вызвать clearvars -global или clear all или clear global

  • Чтобы очистить глобальную переменную из всех рабочих пространств, используйте очистить глобальную переменную.
  • Чтобы удалить глобальную переменную из текущего рабочего пространства, но не из других рабочих пространств, используйте очистить переменную.
0 голосов
/ 16 марта 2020

Очевидно, что в mat lab каждый раз, когда вы используете глобальную переменную, вы должны повторно объявлять ее также в рамках функции. Я не уверен, однако, я думаю, что он создает локальный экземпляр переменной с тем же именем, если я не упомянул явно ключевое слово global в рамках функции, как я делал это раньше.

в моем случае я должен был упомянуть глобальный в двух местах, и это работает. gloabl mention 1 enter image description here

...