当前位置:   article > 正文

Opencv与PyQt5设计一个摄像头界面_pyqt5视频界面设计

pyqt5视频界面设计

一、前言

本篇的内容是学习的这一位博主的:程序界面设计_Doc_Cheng的博客-CSDN博客

这是我见过很详细的教你如何使用的PyQt5来完成UI界面设计的,专注于UI界面设计。对我而言,这教程就像是一个实用工具,因为我只需要能够显示图像并展示模型推理的结果即可。

最近一直在努力改进网络和编写脚本,已经有一段时间没写博客了。因此,我打算重新整理这位博主的内容,争取以更简单的方式呈现。

二、UI界面设计

预览图如下所示:

这里我们主要讲解代码部分,UI文件我会直接的提供给大家,大家可以下载下来后再对照着学习。

三、代码讲解

当我们使用PyUIC生成代码的时候,一般情况下这个类下有两个函数:setupUi和retranslateUi。

一般而言,这两个方法用于设置用户界面的初始化和翻译文本。在 setupUi 中,会设置窗口、布局、按钮、文本框等元素的属性和初始状态;而在 retranslateUi 中,会设置用户界面元素的文本内容。

如果我们只是想要一个像上面的一个浏览图,你可以直接使用下面的代码直接进行预览,它本身并没有任何的功能,只是将UI界面的布局展示出来了,要想做更多的事情,那就需要给这个类补充更多的功能。

  1. from OboardCamDisp import Ui_MainWindow
  2. import sys
  3. from PyQt5.QtWidgets import QApplication, QMainWindow
  4. class CamShow(QMainWindow, Ui_MainWindow):
  5. def __init__(self, parent=None):
  6. super(CamShow, self).__init__(parent)
  7. self.setupUi(self)
  8. if __name__ == '__main__':
  9. app = QApplication(sys.argv)
  10. ui=CamShow()
  11. ui.show()
  12. sys.exit(app.exec_())

你随意的点击滑动这些控件是没有任何用的,这里的CamShow 类继承自 QMainWindow 和 Ui_MainWindow,通过调用 setupUi 方法初始化界面。

1,滑动条与微调框的连接

当我运行上面的文件时候,我们发现移动滑动条或者给微调框调整是各改各的,这里我们可以通过将滑块的 valueChanged 信号连接到对应微调框的 setValue 槽,以及将微调框的 valueChanged 信号连接到对应滑块的 setValue 槽。

  1. def PrepSliders(self):
  2. self.RedColorSld.valueChanged.connect(self.RedColorSpB.setValue)
  3. self.RedColorSpB.valueChanged.connect(self.RedColorSld.setValue)
  4. self.GreenColorSld.valueChanged.connect(self.GreenColorSpB.setValue)
  5. self.GreenColorSpB.valueChanged.connect(self.GreenColorSld.setValue)
  6. self.BlueColorSld.valueChanged.connect(self.BlueColorSpB.setValue)
  7. self.BlueColorSpB.valueChanged.connect(self.BlueColorSld.setValue)
  8. self.ExpTimeSld.valueChanged.connect(self.ExpTimeSpB.setValue)
  9. self.ExpTimeSpB.valueChanged.connect(self.ExpTimeSld.setValue)
  10. self.GainSld.valueChanged.connect(self.GainSpB.setValue)
  11. self.GainSpB.valueChanged.connect(self.GainSld.setValue)
  12. self.BrightSld.valueChanged.connect(self.BrightSpB.setValue)
  13. self.BrightSpB.valueChanged.connect(self.BrightSld.setValue)
  14. self.ContrastSld.valueChanged.connect(self.ContrastSpB.setValue)
  15. self.ContrastSpB.valueChanged.connect(self.ContrastSld.setValue)

这里通信成功,像上面的self.RedColorSld和self.RedColorSpB都是继承的Ui_MainWindow下面的,名字,还有数值都需要自己去修改。

其实也就是这下面的两个地方:

2,相机的初始化和参数设置

这里通过 cv2.VideoCapture 初始化了相机,并设置了一些相机参数,例如曝光时间、增益、亮度和对比度。通过连接滑动条和微调框,能使用户能够动态地调整这些参数。

  1. def PrepCamera(self):
  2. try:
  3. self.camera = cv2.VideoCapture(0)
  4. self.MsgTE.clear()
  5. self.MsgTE.append('Oboard camera connected.')
  6. self.MsgTE.setPlainText()
  7. except Exception as e:
  8. self.MsgTE.clear()
  9. self.MsgTE.append(str(e))
  10. def PrepParameters(self):
  11. self.RecordPath='D:/PythonProject/pythonProject1/OpencvPyQt5/'
  12. self.FilePathLE.setText(self.RecordPath) # 默认显示
  13. self.RecordFlag=0
  14. self.Image_num=0
  15. self.R=1
  16. self.G=1
  17. self.B=1
  18. self.ExpTimeSld.setValue(self.camera.get(15))
  19. self.SetExposure()
  20. self.GainSld.setValue(self.camera.get(14))
  21. self.SetGain()
  22. self.BrightSld.setValue(self.camera.get(10))
  23. self.SetBrightness()
  24. self.ContrastSld.setValue(self.camera.get(11))
  25. self.SetContrast()
  26. self.MsgTE.clear()

3,界面按钮和相关功能

在这一步中,为界面上的按钮添加了一些功能,例如启动相机、停止相机、录像等。通过连接这些按钮的点击事件,我们实现了相应的功能。特别是,通过 CallBackFunctions 函数,我们将按钮的点击事件与后台函数进行了关联。

  1. def StartCamera(self):
  2. self.ShowBt.setEnabled(False)
  3. self.StopBt.setEnabled(True)
  4. self.RecordBt.setEnabled(True)
  5. self.GrayImgCkB.setEnabled(True)
  6. if self.GrayImgCkB.isChecked() == 0:
  7. self.RedColorSld.setEnabled(True)
  8. self.RedColorSpB.setEnabled(True)
  9. self.GreenColorSld.setEnabled(True)
  10. self.GreenColorSpB.setEnabled(True)
  11. self.BlueColorSld.setEnabled(True)
  12. self.BlueColorSpB.setEnabled(True)
  13. self.ExpTimeSld.setEnabled(True)
  14. self.ExpTimeSpB.setEnabled(True)
  15. self.GainSld.setEnabled(True)
  16. self.GainSpB.setEnabled(True)
  17. self.BrightSld.setEnabled(True)
  18. self.BrightSpB.setEnabled(True)
  19. self.ContrastSld.setEnabled(True)
  20. self.ContrastSpB.setEnabled(True)
  21. self.RecordBt.setText('录像')
  22. self.Timer.start(1)
  23. self.timelb = time.perf_counter()

在最开始运行的时候,有些需要禁用,比如,比如在上面的地方灰度的checkbox没有被点击可以调试R、G、B。

  1. def StopCamera(self):
  2. if self.StopBt.text()=='暂停':
  3. self.StopBt.setText('继续')
  4. self.RecordBt.setText('保存')
  5. self.Timer.stop()
  6. elif self.StopBt.text()=='继续':
  7. self.StopBt.setText('暂停')
  8. self.RecordBt.setText('录像')
  9. self.Timer.start(1)

这是一个很简单的逻辑,在这个函数中,如果当前按钮的文本为 ‘暂停’,则将其设置为 ‘继续’ ,并将录像按钮的文本设置为 ‘保存’,最后停止计时器;如果当前按钮的文本为 ‘继续',则将其设置为 ‘暂停’,将录像按钮的文本设置为 ‘录像’ ,并重新启动计时器。

  1. def RecordCamera(self):
  2. tag=self.RecordBt.text()
  3. if tag=='保存':
  4. try:
  5. image_name=self.RecordPath+'image'+time.strftime('%Y%m%d%H%M%S',time.localtime(time.time()))+'.jpg'
  6. print(image_name)
  7. cv2.imwrite(image_name, self.Image)
  8. self.MsgTE.clear()
  9. self.MsgTE.setPlainText('Image saved.')
  10. except Exception as e:
  11. self.MsgTE.clear()
  12. self.MsgTE.setPlainText(str(e))
  13. elif tag == '录像':
  14. self.RecordBt.setText('停止')
  15. video_name = self.RecordPath + 'video' + time.strftime('%Y%m%d%H%M%S',time.localtime(time.time())) + '.avi'
  16. fps = self.FmRateLCD.value()
  17. size = (self.Image.shape[1],self.Image.shape[0])
  18. fourcc = cv2.VideoWriter_fourcc('M', 'J', 'P', 'G')
  19. self.video_writer = cv2.VideoWriter(video_name, fourcc,self.camera.get(5), size)
  20. self.RecordFlag=1
  21. self.MsgTE.setPlainText('Video recording...')
  22. self.StopBt.setEnabled(False)
  23. self.ExitBt.setEnabled(False)
  24. elif tag == '停止':
  25. self.RecordBt.setText('录像')
  26. self.video_writer.release()
  27. self.RecordFlag = 0
  28. self.MsgTE.setPlainText('Video saved.')
  29. self.StopBt.setEnabled(True)
  30. self.ExitBt.setEnabled(True)

如果按钮的文本为 '保存',则执行保存图片的操作。首先构造图片文件名,使用 cv2.imwrite 将当前图像保存为 JPG 文件,然后清空消息显示框并显示保存成功或者错误信息。如果按钮的文本为 '录像',则执行开始录像的操作。构造视频文件名,设置录像相关参数(帧率、大小等),创建 cv2.VideoWriter 对象开始录像,并在消息显示框中显示录像信息。同时禁用停止按钮和退出按钮,防止在录像时进行其他操作。如果按钮的文本为 '停止',则执行停止录像的操作。将按钮文本设置为 '录像',释放 cv2.VideoWriter 对象,停止录像标志,显示录像保存成功的消息,并启用停止按钮和退出按钮。

4,图像处理与显示

  1. def ColorAdjust(self, img):
  2. try:
  3. B = img[:, :, 0]
  4. G = img[:, :, 1]
  5. R = img[:, :, 2]
  6. # 根据滑动条的值进行颜色通道的调整
  7. B = B * self.B
  8. G = G * self.G
  9. R = R * self.R
  10. img_adjusted = img.copy()
  11. img_adjusted[:, :, 0] = B
  12. img_adjusted[:, :, 1] = G
  13. img_adjusted[:, :, 2] = R
  14. return img_adjusted
  15. except Exception as e:
  16. self.MsgTE.setPlainText(str(e))
  17. def DispImg(self):
  18. if self.GrayImgCkB.isChecked():
  19. img = cv2.cvtColor(self.Image, cv2.COLOR_BGR2GRAY)
  20. else:
  21. img = cv2.cvtColor(self.Image, cv2.COLOR_BGR2RGB)
  22. qimg = qimage2ndarray.array2qimage(img)
  23. self.DispLb.setPixmap(QPixmap(qimg))
  24. self.DispLb.show()

ColorAdjust函数用于进行颜色调整。然后,通过 qimage2ndarray 将处理后的图像转换为 QImage,最后使用 QPixmap 在界面上的 DispLb 标签上显示图像。这样,我们完成了图像处理与显示的步骤。

5,使用回调函数将功能与控件进行连接

  1. def CallBackFunctions(self):
  2. self.FilePathBt.clicked.connect(self.SetFilePath)
  3. self.ShowBt.clicked.connect(self.StartCamera)
  4. self.StopBt.clicked.connect(self.StopCamera)
  5. self.RecordBt.clicked.connect(self.RecordCamera)
  6. self.ExitBt.clicked.connect(self.ExitApp)
  7. self.GrayImgCkB.stateChanged.connect(self.SetGray)
  8. self.ExpTimeSld.valueChanged.connect(self.SetExposure)
  9. self.GainSld.valueChanged.connect(self.SetGain)
  10. self.BrightSld.valueChanged.connect(self.SetBrightness)
  11. self.ContrastSld.valueChanged.connect(self.SetContrast)
  12. self.RedColorSld.valueChanged.connect(self.SetR)
  13. self.GreenColorSld.valueChanged.connect(self.SetG)
  14. self.BlueColorSld.valueChanged.connect(self.SetB)
  15. def SetR(self):
  16. R=self.RedColorSld.value()
  17. self.R=R/255
  18. def SetG(self):
  19. G=self.GreenColorSld.value()
  20. self.G=G/255
  21. def SetB(self):
  22. B=self.BlueColorSld.value()
  23. self.B=B/255
  24. def SetContrast(self):
  25. contrast_toset=self.ContrastSld.value()
  26. try:
  27. self.camera.set(11,contrast_toset)
  28. self.MsgTE.setPlainText('The contrast is set to ' + str(self.camera.get(11)))
  29. except Exception as e:
  30. self.MsgTE.setPlainText(str(e))
  31. def SetBrightness(self):
  32. brightness_toset=self.BrightSld.value()
  33. try:
  34. self.camera.set(10,brightness_toset)
  35. self.MsgTE.setPlainText('The brightness is set to ' + str(self.camera.get(10)))
  36. except Exception as e:
  37. self.MsgTE.setPlainText(str(e))
  38. def SetGain(self):
  39. gain_toset=self.GainSld.value()
  40. try:
  41. self.camera.set(14,gain_toset)
  42. self.MsgTE.setPlainText('The gain is set to '+str(self.camera.get(14)))
  43. except Exception as e:
  44. self.MsgTE.setPlainText(str(e))
  45. def SetExposure(self):
  46. try:
  47. exposure_time_toset=self.ExpTimeSld.value()
  48. self.camera.set(15,exposure_time_toset)
  49. self.MsgTE.setPlainText('The exposure time is set to '+str(self.camera.get(15)))
  50. except Exception as e:
  51. self.MsgTE.setPlainText(str(e))
  52. def SetGray(self):
  53. if self.GrayImgCkB.isChecked():
  54. self.RedColorSld.setEnabled(False)
  55. self.RedColorSpB.setEnabled(False)
  56. self.GreenColorSld.setEnabled(False)
  57. self.GreenColorSpB.setEnabled(False)
  58. self.BlueColorSld.setEnabled(False)
  59. self.BlueColorSpB.setEnabled(False)
  60. else:
  61. self.RedColorSld.setEnabled(True)
  62. self.RedColorSpB.setEnabled(True)
  63. self.GreenColorSld.setEnabled(True)
  64. self.GreenColorSpB.setEnabled(True)
  65. self.BlueColorSld.setEnabled(True)
  66. self.BlueColorSpB.setEnabled(True)

四、其他补充

如果报错PyQt下载不了,是缺少了C++,下一个Visual Studio然后安装一个C++桌面开发就可以了。

如果运行出现:

DeprecationWarning: sipPyTypeDict() is deprecated, the extension module should use sipPyTypeDictRef() instead class CamShow(QMainWindow, Ui_MainWindow):

说的是sip版本不对,这个不影响运行,可以不用理会。

五、资源下载

PyQt5-opencv-UIdesign/Camshow at main · Auorui/PyQt5-opencv-UIdesign (github.com)

主函数文件:

  1. from OboardCamDisp import Ui_MainWindow
  2. import sys
  3. from PyQt5.QtWidgets import QApplication,QMainWindow,QFileDialog
  4. from PyQt5.QtCore import QTimer,QCoreApplication
  5. from PyQt5.QtGui import QPixmap
  6. import cv2
  7. import qimage2ndarray
  8. import time
  9. class CamShow(QMainWindow,Ui_MainWindow):
  10. def __del__(self):
  11. try:
  12. self.camera.release() # 释放资源
  13. except:
  14. return
  15. def __init__(self,parent=None):
  16. super(CamShow,self).__init__(parent)
  17. self.setupUi(self)
  18. self.PrepSliders()
  19. self.PrepWidgets()
  20. self.PrepParameters()
  21. self.CallBackFunctions()
  22. self.Timer=QTimer()
  23. self.Timer.timeout.connect(self.TimerOutFun)
  24. # 滑动条与微调框的连接
  25. def PrepSliders(self):
  26. self.RedColorSld.valueChanged.connect(self.RedColorSpB.setValue)
  27. self.RedColorSpB.valueChanged.connect(self.RedColorSld.setValue)
  28. self.GreenColorSld.valueChanged.connect(self.GreenColorSpB.setValue)
  29. self.GreenColorSpB.valueChanged.connect(self.GreenColorSld.setValue)
  30. self.BlueColorSld.valueChanged.connect(self.BlueColorSpB.setValue)
  31. self.BlueColorSpB.valueChanged.connect(self.BlueColorSld.setValue)
  32. self.ExpTimeSld.valueChanged.connect(self.ExpTimeSpB.setValue)
  33. self.ExpTimeSpB.valueChanged.connect(self.ExpTimeSld.setValue)
  34. self.GainSld.valueChanged.connect(self.GainSpB.setValue)
  35. self.GainSpB.valueChanged.connect(self.GainSld.setValue)
  36. self.BrightSld.valueChanged.connect(self.BrightSpB.setValue)
  37. self.BrightSpB.valueChanged.connect(self.BrightSld.setValue)
  38. self.ContrastSld.valueChanged.connect(self.ContrastSpB.setValue)
  39. self.ContrastSpB.valueChanged.connect(self.ContrastSld.setValue)
  40. # 相机的初始化和参数设置
  41. def PrepCamera(self):
  42. try:
  43. self.camera=cv2.VideoCapture(0)
  44. self.MsgTE.clear()
  45. self.MsgTE.append('Oboard camera connected.')
  46. self.MsgTE.setPlainText()
  47. except Exception as e:
  48. self.MsgTE.clear()
  49. self.MsgTE.append(str(e))
  50. def PrepParameters(self):
  51. self.RecordFlag = 0
  52. self.RecordPath ='D:/PythonProject/pythonProject1/OpencvPyQt5/Camshow'
  53. self.FilePathLE.setText(self.RecordPath)
  54. self.Image_num = 0
  55. self.R = 1
  56. self.G = 1
  57. self.B = 1
  58. self.ExpTimeSld.setValue(self.camera.get(15))
  59. self.SetExposure()
  60. self.GainSld.setValue(self.camera.get(14))
  61. self.SetGain()
  62. self.BrightSld.setValue(self.camera.get(10))
  63. self.SetBrightness()
  64. self.ContrastSld.setValue(self.camera.get(11))
  65. self.SetContrast()
  66. self.MsgTE.clear()
  67. # 相机的初始化和参数设置
  68. def StartCamera(self):
  69. self.ShowBt.setEnabled(False)
  70. self.StopBt.setEnabled(True)
  71. self.RecordBt.setEnabled(True)
  72. self.GrayImgCkB.setEnabled(True)
  73. if self.GrayImgCkB.isChecked() == 0:
  74. self.RedColorSld.setEnabled(True)
  75. self.RedColorSpB.setEnabled(True)
  76. self.GreenColorSld.setEnabled(True)
  77. self.GreenColorSpB.setEnabled(True)
  78. self.BlueColorSld.setEnabled(True)
  79. self.BlueColorSpB.setEnabled(True)
  80. self.ExpTimeSld.setEnabled(True)
  81. self.ExpTimeSpB.setEnabled(True)
  82. self.GainSld.setEnabled(True)
  83. self.GainSpB.setEnabled(True)
  84. self.BrightSld.setEnabled(True)
  85. self.BrightSpB.setEnabled(True)
  86. self.ContrastSld.setEnabled(True)
  87. self.ContrastSpB.setEnabled(True)
  88. self.RecordBt.setText('录像')
  89. self.Timer.start(1)
  90. self.timelb=time.perf_counter()
  91. def StopCamera(self):
  92. if self.StopBt.text()=='暂停':
  93. self.StopBt.setText('继续')
  94. self.RecordBt.setText('保存')
  95. self.Timer.stop()
  96. elif self.StopBt.text()=='继续':
  97. self.StopBt.setText('暂停')
  98. self.RecordBt.setText('录像')
  99. self.Timer.start(1)
  100. def RecordCamera(self):
  101. tag = self.RecordBt.text()
  102. if tag == '保存':
  103. try:
  104. image_name=self.RecordPath+'image'+time.strftime('%Y%m%d%H%M%S',time.localtime(time.time()))+'.jpg'
  105. print(image_name)
  106. cv2.imwrite(image_name, self.Image)
  107. self.MsgTE.clear()
  108. self.MsgTE.setPlainText('Image saved.')
  109. except Exception as e:
  110. self.MsgTE.clear()
  111. self.MsgTE.setPlainText(str(e))
  112. elif tag == '录像':
  113. self.RecordBt.setText('停止')
  114. video_name = self.RecordPath + 'video' + time.strftime('%Y%m%d%H%M%S',time.localtime(time.time())) + '.avi'
  115. fps = self.FmRateLCD.value()
  116. size = (self.Image.shape[1],self.Image.shape[0])
  117. fourcc = cv2.VideoWriter_fourcc('M', 'J', 'P', 'G')
  118. self.video_writer = cv2.VideoWriter(video_name, fourcc,self.camera.get(5), size)
  119. self.RecordFlag=1
  120. self.MsgTE.setPlainText('Video recording...')
  121. self.StopBt.setEnabled(False)
  122. self.ExitBt.setEnabled(False)
  123. elif tag == '停止':
  124. self.RecordBt.setText('录像')
  125. self.video_writer.release()
  126. self.RecordFlag = 0
  127. self.MsgTE.setPlainText('Video saved.')
  128. self.StopBt.setEnabled(True)
  129. self.ExitBt.setEnabled(True)
  130. # 图像处理与显示
  131. def ColorAdjust(self, img):
  132. try:
  133. B = img[:, :, 0]
  134. G = img[:, :, 1]
  135. R = img[:, :, 2]
  136. # 根据滑动条的值进行颜色通道的调整
  137. B = B * self.B
  138. G = G * self.G
  139. R = R * self.R
  140. img_adjusted = img.copy()
  141. img_adjusted[:, :, 0] = B
  142. img_adjusted[:, :, 1] = G
  143. img_adjusted[:, :, 2] = R
  144. return img_adjusted
  145. except Exception as e:
  146. self.MsgTE.setPlainText(str(e))
  147. def DispImg(self):
  148. if self.GrayImgCkB.isChecked():
  149. img = cv2.cvtColor(self.Image, cv2.COLOR_BGR2GRAY)
  150. else:
  151. img = cv2.cvtColor(self.Image, cv2.COLOR_BGR2RGB)
  152. qimg = qimage2ndarray.array2qimage(img)
  153. self.DispLb.setPixmap(QPixmap(qimg))
  154. self.DispLb.show()
  155. def TimerOutFun(self):
  156. success, img = self.camera.read()
  157. if success:
  158. self.Image = self.ColorAdjust(img)
  159. self.DispImg()
  160. self.Image_num += 1
  161. if self.RecordFlag:
  162. self.video_writer.write(img)
  163. if self.Image_num % 10 == 9:
  164. frame_rate = 10/(time.perf_counter()-self.timelb)
  165. self.FmRateLCD.display(frame_rate)
  166. self.timelb = time.perf_counter()
  167. self.ImgWidthLCD.display(self.camera.get(3))
  168. self.ImgHeightLCD.display(self.camera.get(4))
  169. else:
  170. self.MsgTE.clear()
  171. self.MsgTE.setPlainText('Image obtaining failed.')
  172. def PrepWidgets(self):
  173. self.PrepCamera()
  174. self.StopBt.setEnabled(False)
  175. self.RecordBt.setEnabled(False)
  176. self.GrayImgCkB.setEnabled(False)
  177. self.RedColorSld.setEnabled(False)
  178. self.RedColorSpB.setEnabled(False)
  179. self.GreenColorSld.setEnabled(False)
  180. self.GreenColorSpB.setEnabled(False)
  181. self.BlueColorSld.setEnabled(False)
  182. self.BlueColorSpB.setEnabled(False)
  183. self.ExpTimeSld.setEnabled(False)
  184. self.ExpTimeSpB.setEnabled(False)
  185. self.GainSld.setEnabled(False)
  186. self.GainSpB.setEnabled(False)
  187. self.BrightSld.setEnabled(False)
  188. self.BrightSpB.setEnabled(False)
  189. self.ContrastSld.setEnabled(False)
  190. self.ContrastSpB.setEnabled(False)
  191. def SetR(self):
  192. R=self.RedColorSld.value()
  193. self.R=R/255
  194. def SetG(self):
  195. G=self.GreenColorSld.value()
  196. self.G=G/255
  197. def SetB(self):
  198. B=self.BlueColorSld.value()
  199. self.B=B/255
  200. def SetContrast(self):
  201. contrast_toset=self.ContrastSld.value()
  202. try:
  203. self.camera.set(11,contrast_toset)
  204. self.MsgTE.setPlainText('The contrast is set to ' + str(self.camera.get(11)))
  205. except Exception as e:
  206. self.MsgTE.setPlainText(str(e))
  207. def SetBrightness(self):
  208. brightness_toset=self.BrightSld.value()
  209. try:
  210. self.camera.set(10,brightness_toset)
  211. self.MsgTE.setPlainText('The brightness is set to ' + str(self.camera.get(10)))
  212. except Exception as e:
  213. self.MsgTE.setPlainText(str(e))
  214. def SetGain(self):
  215. gain_toset=self.GainSld.value()
  216. try:
  217. self.camera.set(14,gain_toset)
  218. self.MsgTE.setPlainText('The gain is set to '+str(self.camera.get(14)))
  219. except Exception as e:
  220. self.MsgTE.setPlainText(str(e))
  221. def SetExposure(self):
  222. try:
  223. exposure_time_toset=self.ExpTimeSld.value()
  224. self.camera.set(15,exposure_time_toset)
  225. self.MsgTE.setPlainText('The exposure time is set to '+str(self.camera.get(15)))
  226. except Exception as e:
  227. self.MsgTE.setPlainText(str(e))
  228. def SetGray(self):
  229. if self.GrayImgCkB.isChecked():
  230. self.RedColorSld.setEnabled(False)
  231. self.RedColorSpB.setEnabled(False)
  232. self.GreenColorSld.setEnabled(False)
  233. self.GreenColorSpB.setEnabled(False)
  234. self.BlueColorSld.setEnabled(False)
  235. self.BlueColorSpB.setEnabled(False)
  236. else:
  237. self.RedColorSld.setEnabled(True)
  238. self.RedColorSpB.setEnabled(True)
  239. self.GreenColorSld.setEnabled(True)
  240. self.GreenColorSpB.setEnabled(True)
  241. self.BlueColorSld.setEnabled(True)
  242. self.BlueColorSpB.setEnabled(True)
  243. def SetFilePath(self):
  244. dirname = QFileDialog.getExistingDirectory(self, "浏览", '.')
  245. if dirname:
  246. self.FilePathLE.setText(dirname)
  247. self.RecordPath=dirname+'/'
  248. def CallBackFunctions(self):
  249. self.FilePathBt.clicked.connect(self.SetFilePath)
  250. self.ShowBt.clicked.connect(self.StartCamera)
  251. self.StopBt.clicked.connect(self.StopCamera)
  252. self.RecordBt.clicked.connect(self.RecordCamera)
  253. self.ExitBt.clicked.connect(self.ExitApp)
  254. self.GrayImgCkB.stateChanged.connect(self.SetGray)
  255. self.ExpTimeSld.valueChanged.connect(self.SetExposure)
  256. self.GainSld.valueChanged.connect(self.SetGain)
  257. self.BrightSld.valueChanged.connect(self.SetBrightness)
  258. self.ContrastSld.valueChanged.connect(self.SetContrast)
  259. self.RedColorSld.valueChanged.connect(self.SetR)
  260. self.GreenColorSld.valueChanged.connect(self.SetG)
  261. self.BlueColorSld.valueChanged.connect(self.SetB)
  262. def ExitApp(self):
  263. self.Timer.Stop()
  264. self.camera.release()
  265. self.MsgTE.setPlainText('Exiting the application..')
  266. QCoreApplication.quit()
  267. if __name__ == '__main__':
  268. app = QApplication(sys.argv)
  269. ui=CamShow()
  270. ui.show()
  271. sys.exit(app.exec_())

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/618766
推荐阅读
相关标签
  

闽ICP备14008679号