前言
上一节我们初步完成了主程序的结构设计,只要将每一个回调函数编写完成就可实现最终的功能了,本节来详细介绍这些回调函数的内容。由于设计到的回调函数较多,我们按功能将其分类,分别为摄像头图片的读取和显示、图像颜色控制、摄像头参数设置、视频文件保存、退出程序。
摄像头的读取和显示
从笔记本自带的摄像头中读取图片,并将其显示在我们命名为DispLb的label中。这一过程涉及到的‘开始’和‘暂停’两个按钮,我们预期的功能是当鼠标单击‘开始’按钮时,程序就不断地从摄像头读取图像,并将其实时显示在DispLb中,而一旦我们点击‘暂停’按钮,就停止从摄像头读取图像,DispLb中显示的图像也不再改变。当然,还涉及到一些其它控件的‘enable’或‘disable’。具体涉及到的回调函数包括‘开始’按钮的回调函数:StartCamera();‘暂停’按钮的回调函数: StopCamera();另外,由于我们是通过time函数来控制图像的重复读取,因此还需要它的回调函数
TimerOutFun();将图片通过DispLb显示出来的函数:DispImg()。这些函数的内容如下所示。
def StartCamera(self):
self.ShowBt.setEnabled(False)
self.StopBt.setEnabled(True)
self.RecordBt.setEnabled(True)
self.GrayImgCkB.setEnabled(True)
if self.GrayImgCkB.isChecked()==0:
self.RedColorSld.setEnabled(True)
self.RedColorSpB.setEnabled(True)
self.GreenColorSld.setEnabled(True)
self.GreenColorSpB.setEnabled(True)
self.BlueColorSld.setEnabled(True)
self.BlueColorSpB.setEnabled(True)
self.ExpTimeSld.setEnabled(True)
self.ExpTimeSpB.setEnabled(True)
self.GainSld.setEnabled(True)
self.GainSpB.setEnabled(True)
self.BrightSld.setEnabled(True)
self.BrightSpB.setEnabled(True)
self.ContrastSld.setEnabled(True)
self.ContrastSpB.setEnabled(True)
self.RecordBt.setText('录像')
self.Timer.start(1)
self.timelb=time.clock()
StartCamera这个函数的主要功能就是它最后两行代码,self.Timer.start(1)
用来启动计时器,计时周期为1ms,即每隔1ms程序会自动调用一次TimerOutFun。我们将图像的具体读取和显示放到TimerOutFun中,这样就可以实现图像的实时读取和显示了。StartCamera的前面那些代码是用来启用相机参数设置和‘暂停’按钮等控件,同时,停用‘开始’按钮。
def StopCamera(self):
if self.StopBt.text()=='暂停':
self.StopBt.setText('继续')
self.RecordBt.setText('保存')
self.Timer.stop()
elif self.StopBt.text()=='继续':
self.StopBt.setText('暂停')
self.RecordBt.setText('录像')
self.Timer.start(1)
由于我们的‘暂停’和