MATLAB 的global函数(全局变量)—从python和MAT实例中详细解释

今天本来发布了用摄像头 gui 拍照的程序,然后有人私信我问其中的global函数的使用方法。

我想了一下,就以摄像头拍照为例子去解释一下这个函数的用法吧。

但是首先用python中的一个小例子来说明一下:

>>>YOU = '老大'
>>>def fun():
		YOU = '老二'
		print(YOU)

>>>fun()
>>>print(YOU)

大家应该知道结果是

老二
老大

但如果使用global:

 I = '老大'
def fun():
    global I
    I='老二'    
    print(I)
    
fun()
print(I)

在这里简单想下就是使用global定义之后,函数内的变量也就可以被改变了

就像变量与参数之间的关系,但是使用global之后,参数就变成真实的变量了,可以在define的函数中改变之前定义的值,很有意思。

结果可想而知:

老二
老二
%%%%%**是老二啊???!!!要当就当老大啊!!!

所以代码应该改成这样:

 I = '你是老二吧,哈哈'
def fun():
    global I
    I='我才是老大,哈哈哈哈'    
    print(I)
    
fun()
print(I)
我才是老大,哈哈哈哈
我才是老大,哈哈哈哈

OK 现在返回的就是你心底最先说的话吧,,哈哈,不开玩笑了…

下面看看在matlab实例项目中的应用吧:
在这里插入图片描述

话不多说,直接上代码:

function pushbutton1_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
		vid = videoinput('winvideo',1);%调用摄像头
		axes = (handles.axes1);%指定figure
		preview(vid);%显示视频
function pushbutton2_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton2 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
		frame = getsnapshot(vid);%获取每一帧
		I = ycbcr2rgb(frame);%RGB图像
		imwrite(I,'csdn.png');

如果我代码是这样的话,命令行一定会报错:未定义变量‘vid’

未定义函数或变量 'vid'

大家看到pushbutton_1中定义vid在pushbutton_2中调用不了

理由很简单,vid是push_1中的局部变量

所以解决这个问题最好就是在push_1和push_2中把vid定义为全局变量

而实现这个操作的就是global函数。

function pushbutton1_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
		global(vid)
		vid = videoinput('winvideo',1);%调用摄像头
		axes = (handles.axes1);%指定figure
		preview(vid);%显示视频
function pushbutton2_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton2 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
		global(vid)
		frame = getsnapshot(vid);%获取每一帧
		I = ycbcr2rgb(frame);%RGB图像
		imwrite(I,'csdn.png');

而加上全局变量后就可以正常运行。

好了,这样的global函数就说完了。

题外话:

最近新型冠状病毒疫情有所好转,我老爸在家把盗墓笔记全部电影电视剧看完了

现在拉着我们家人一起看斗罗大陆的动画片…(不过还真的挺好看的哈哈哈)

不说了,赶快陪爸妈看斗罗大陆动画片了…

希望疫情赶快结束吧!!!

发布了9 篇原创文章 · 获赞 15 · 访问量 3985

猜你喜欢

转载自blog.csdn.net/qq_45504119/article/details/104398930