今天本来发布了用摄像头 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函数就说完了。
题外话:
最近新型冠状病毒疫情有所好转,我老爸在家把盗墓笔记全部电影电视剧看完了
现在拉着我们家人一起看斗罗大陆的动画片…(不过还真的挺好看的哈哈哈)
不说了,赶快陪爸妈看斗罗大陆动画片了…
希望疫情赶快结束吧!!!