文章目录

  • 1.实现目标
  • 2.Qt designer绘制界面
  • 3.将.ui文件转为.py文件
  • 4.ui_MainWindow.py文件
  • 5.myMainWindow.py文件(调用ui_MainWindow.py)
  • 6.主程序入口appMain.py(非必须)
  • 7.效果

1.实现目标

  使用OpenCV-Python调用笔记本电脑摄像头,使用QT绘制图形界面,当按下拍照时,照片显示在屏幕,按下保存时,该照片可以保存在指定路径。

2.Qt designer绘制界面

3.将.ui文件转为.py文件

pyuic5 -o ui_MainWindow.py MainWindow.ui

4.ui_MainWindow.py文件

# -*- coding: utf-8 -*-# Form implementation generated from reading ui file 'MainWindow.ui'
#
# Created by: PyQt5 UI code generator 5.15.4
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtMultimediaWidgets import QCameraViewfinderclass Ui_MainWindow(object):def setupUi(self, MainWindow):MainWindow.setObjectName("MainWindow")MainWindow.resize(963, 603)self.centralWidget = QtWidgets.QWidget(MainWindow)self.centralWidget.setObjectName("centralWidget")self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.centralWidget)self.verticalLayout_3.setContentsMargins(3, 3, 3, 3)self.verticalLayout_3.setSpacing(3)self.verticalLayout_3.setObjectName("verticalLayout_3")self.groupBox_2 = QtWidgets.QGroupBox(self.centralWidget)self.groupBox_2.setMaximumSize(QtCore.QSize(16777215, 60))self.groupBox_2.setTitle("")self.groupBox_2.setObjectName("groupBox_2")self.gridLayout = QtWidgets.QGridLayout(self.groupBox_2)self.gridLayout.setContentsMargins(11, 5, 11, 5)self.gridLayout.setHorizontalSpacing(12)self.gridLayout.setVerticalSpacing(6)self.gridLayout.setObjectName("gridLayout")self.label = QtWidgets.QLabel(self.groupBox_2)self.label.setMaximumSize(QtCore.QSize(80, 16777215))self.label.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)self.label.setObjectName("label")self.gridLayout.addWidget(self.label, 0, 0, 1, 1)self.comboCamera = QtWidgets.QComboBox(self.groupBox_2)self.comboCamera.setMinimumSize(QtCore.QSize(150, 20))self.comboCamera.setObjectName("comboCamera")self.gridLayout.addWidget(self.comboCamera, 0, 1, 1, 1)self.verticalLayout_3.addWidget(self.groupBox_2)self.splitter = QtWidgets.QSplitter(self.centralWidget)sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)sizePolicy.setHorizontalStretch(0)sizePolicy.setVerticalStretch(0)sizePolicy.setHeightForWidth(self.splitter.sizePolicy().hasHeightForWidth())self.splitter.setSizePolicy(sizePolicy)self.splitter.setOrientation(QtCore.Qt.Horizontal)self.splitter.setHandleWidth(5)self.splitter.setObjectName("splitter")self.splitter.setStretchFactor(1, 1)self.groupBox = QtWidgets.QGroupBox(self.splitter)self.groupBox.setMinimumSize(QtCore.QSize(476, 0))self.groupBox.setMaximumSize(QtCore.QSize(16777215, 16777215))self.groupBox.setObjectName("groupBox")self.gridLayout_2 = QtWidgets.QGridLayout(self.groupBox)self.gridLayout_2.setContentsMargins(11, 11, 11, 11)self.gridLayout_2.setSpacing(6)self.gridLayout_2.setObjectName("gridLayout_2")self.viewFinder = QCameraViewfinder(self.groupBox)self.viewFinder.setMinimumSize(QtCore.QSize(0, 0))self.viewFinder.setObjectName("viewFinder")self.gridLayout_2.addWidget(self.viewFinder, 0, 0, 1, 1)self.groupBox_3 = QtWidgets.QGroupBox(self.splitter)self.groupBox_3.setMinimumSize(QtCore.QSize(476, 0))self.groupBox_3.setMaximumSize(QtCore.QSize(16777215, 16777215))self.groupBox_3.setObjectName("groupBox_3")self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.groupBox_3)self.verticalLayout_2.setContentsMargins(11, 11, 11, 11)self.verticalLayout_2.setSpacing(6)self.verticalLayout_2.setObjectName("verticalLayout_2")self.LabImage = QtWidgets.QLabel(self.groupBox_3)self.LabImage.setMinimumSize(QtCore.QSize(0, 0))self.LabImage.setAlignment(QtCore.Qt.AlignCenter)self.LabImage.setObjectName("LabImage")self.verticalLayout_2.addWidget(self.LabImage)self.verticalLayout_3.addWidget(self.splitter)MainWindow.setCentralWidget(self.centralWidget)self.menuBar = QtWidgets.QMenuBar(MainWindow)self.menuBar.setGeometry(QtCore.QRect(0, 0, 963, 23))self.menuBar.setObjectName("menuBar")MainWindow.setMenuBar(self.menuBar)self.mainToolBar = QtWidgets.QToolBar(MainWindow)self.mainToolBar.setToolButtonStyle(QtCore.Qt.ToolButtonTextBesideIcon)self.mainToolBar.setObjectName("mainToolBar")MainWindow.addToolBar(QtCore.Qt.TopToolBarArea, self.mainToolBar)self.statusBar = QtWidgets.QStatusBar(MainWindow)self.statusBar.setObjectName("statusBar")MainWindow.setStatusBar(self.statusBar)self.actStartCamera = QtWidgets.QAction(MainWindow)self.actStartCamera.setEnabled(False)self.actStartCamera.setObjectName("actStartCamera")self.actStopCamera = QtWidgets.QAction(MainWindow)self.actStopCamera.setEnabled(False)self.actStopCamera.setObjectName("actStopCamera")self.actCapture = QtWidgets.QAction(MainWindow)self.actCapture.setEnabled(False)self.actCapture.setObjectName("actCapture")self.actQuit = QtWidgets.QAction(MainWindow)self.actQuit.setObjectName("actQuit")self.mainToolBar.addAction(self.actStartCamera)self.mainToolBar.addSeparator()self.mainToolBar.addAction(self.actStopCamera)self.mainToolBar.addSeparator()self.mainToolBar.addAction(self.actCapture)self.mainToolBar.addSeparator()self.mainToolBar.addAction(self.actQuit)self.retranslateUi(MainWindow)self.actQuit.triggered.connect(MainWindow.close)QtCore.QMetaObject.connectSlotsByName(MainWindow)def retranslateUi(self, MainWindow):_translate = QtCore.QCoreApplication.translateMainWindow.setWindowTitle(_translate("MainWindow", "camera"))self.label.setText(_translate("MainWindow", "摄像头设备"))self.groupBox.setTitle(_translate("MainWindow", "摄像头预览"))self.groupBox_3.setTitle(_translate("MainWindow", "抓取的图片"))self.LabImage.setText(_translate("MainWindow", "抓取的图片"))self.actStartCamera.setText(_translate("MainWindow", "开启摄像头"))self.actStartCamera.setToolTip(_translate("MainWindow", "开启摄像头"))self.actStopCamera.setText(_translate("MainWindow", "关闭摄像头"))self.actStopCamera.setToolTip(_translate("MainWindow", "关闭摄像头"))self.actCapture.setText(_translate("MainWindow", "拍照"))self.actCapture.setToolTip(_translate("MainWindow", "拍照"))self.actQuit.setText(_translate("MainWindow", "退出"))self.actQuit.setToolTip(_translate("MainWindow", "退出"))
#from QCameraViewfinder import QCameraViewfinder
import res_rc

5.myMainWindow.py文件(调用ui_MainWindow.py)

import sysimport cv2
from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QFileDialogfrom PyQt5.QtCore import pyqtSlot, Qtfrom PyQt5.QtGui import QImage, QPixmapfrom PyQt5.QtMultimedia import (QCameraInfo, QCameraImageCapture,QImageEncoderSettings, QMultimedia, QVideoFrame, QSound, QCamera)from ui_MainWindow import Ui_MainWindowclass QmyMainWindow(QMainWindow):def __init__(self, parent=None):super().__init__(parent)self.ui = Ui_MainWindow()  # 创建UI对象self.ui.setupUi(self)  # 构造UI界面self.__LabCameraState = QLabel("摄像头state:")self.__LabCameraState.setMinimumWidth(150)self.ui.statusBar.addWidget(self.__LabCameraState)self.__LabImageID = QLabel("图片文件ID:")self.__LabImageID.setMinimumWidth(100)self.ui.statusBar.addWidget(self.__LabImageID)self.__LabImageFile = QLabel("")  # 保存的图片文件名self.ui.statusBar.addPermanentWidget(self.__LabImageFile)self.camera = None  # QCamera对象cameras = QCameraInfo.availableCameras()  # list[QCameraInfo]print(str(len(cameras)) + " camera find!")if len(cameras) > 0:self.__iniCamera()  # 初始化摄像头self.__iniImageCapture()  # 初始化静态画图self.camera.start()def __iniCamera(self):  # 创建 QCamera对象camInfo = QCameraInfo.defaultCamera()  # 获取缺省摄像头#camInfo = QCameraInfo.availableCameras()  # 获取所有摄像头self.ui.comboCamera.addItem(camInfo.description())  # 摄像头描述#self.ui.comboCamera.addItem(camInfo.)self.ui.comboCamera.setCurrentIndex(0)self.camera = QCamera(camInfo)  # 创建摄像头对象self.camera.setViewfinder(self.ui.viewFinder)  # 设置取景框预览self.camera.setCaptureMode(QCamera.CaptureStillImage)  # 抓取静态图片模式self.camera.stateChanged.connect(self.do_cameraStateChanged)def __iniImageCapture(self):  ##创建 QCameraImageCapture对象self.capturer = QCameraImageCapture(self.camera)settings = QImageEncoderSettings()  # 拍照设置settings.setCodec("image/jpeg")  # 设置抓图图形编码settings.setResolution(640, 480)  # 分辨率settings.setQuality(QMultimedia.HighQuality)  # 图片质量self.capturer.setEncodingSettings(settings)self.capturer.setBufferFormat(QVideoFrame.Format_Jpeg)  # 缓冲区格式dest = QCameraImageCapture.CaptureToFile  # 保存到文件(必定执行)self.capturer.setCaptureDestination(dest)  # 保存目标self.capturer.readyForCaptureChanged.connect(self.do_imageReady)self.capturer.imageCaptured.connect(self.do_imageCaptured)@pyqtSlot()  # 拍照def on_actCapture_triggered(self):self.camera.searchAndLock()  # 快门半按下时锁定摄像头参数self.capturer.capture()  # 拍照self.camera.unlock()  # 快门按钮释放时解除锁定@pyqtSlot()  # 打开摄像头def on_actStartCamera_triggered(self):self.camera.start()print("打开摄像头")@pyqtSlot()  # 关闭摄像头def on_actStopCamera_triggered(self):self.camera.stop()print("关闭摄像头")def do_cameraStateChanged(self, state):if (state == QCamera.UnloadedState):self.__LabCameraState.setText("摄像头状态: UnloadedState")elif (state == QCamera.LoadedState):self.__LabCameraState.setText("摄像头状态: LoadedState")elif (state == QCamera.ActiveState):self.__LabCameraState.setText("摄像头状态: ActiveState")self.ui.actStartCamera.setEnabled(state != QCamera.ActiveState)self.ui.actStopCamera.setEnabled(state == QCamera.ActiveState)def do_imageReady(self, ready):self.ui.actCapture.setEnabled(ready)print("摄像头可以拍照")def do_imageCaptured(self, imageID, preview):  # 图片被抓取到内存print("捕捉图片")# preview是 QImage# H = self.ui.LabImage.height()# W = self.ui.LabImage.width()H = 1200W = 900scaledImage = preview.scaled(W, H,Qt.KeepAspectRatio, Qt.SmoothTransformation)self.ui.LabImage.setPixmap(QPixmap.fromImage(scaledImage))self.__LabImageID.setText("图片文件ID:%d" % imageID)self.__LabImageFile.setText("图片正在保存")file_path = QFileDialog.getSaveFileName(self, "保存文件", "C:\\Users\\zty\\Desktop","jpeg files (*.jpeg);;all files(*.*)")scaledImage.save(file_path[0], "jpeg")def do_imageSaved(self, imageID, fileName):  # 图片被保存try:self.__LabImageID.setText("图片文件ID:%d" % imageID)self.__LabImageFile.setText("图片保存为: " + fileName)resize_img = cv2.resize(imageID, dsize=(1200, 900))cv2.imwrite(fileName, resize_img)print("保存图片")except:print("未选择保存文件")if __name__ == "__main__":app = QApplication(sys.argv)form = QmyMainWindow()form.show()sys.exit(app.exec_())

6.主程序入口appMain.py(非必须)

import sysfrom PyQt5.QtWidgets import QApplicationfrom myMainWindow import QmyMainWindowapp = QApplication(sys.argv)  # 创建GUI应用程序mainform = QmyMainWindow()  # 创建主窗体mainform.show()  # 显示主窗体sys.exit(app.exec_())

7.效果

【PYQT项目】摄像头拍照保存相关推荐

  1. 利用Python+opencv进行视频文件的读取和保存,打开笔记本摄像头拍照保存、图像在窗口显示等操作

    版权声明:本文为博主原创文章,转载请附源链接 一.视频文件的读取和保存 Opencv中视频的读入是用VideoCapture函数,保存用的是VideoWriter函数.这两个函数支持的视频格式因电脑系 ...

  2. Unity 调用摄像头拍照保存

    unity在制作很多大屏互动时候都会用到摄像头拍照或者保存图片,摄像头拍照方式也有多种,仅记录一下. using System.Collections; using System.Collection ...

  3. 用Python控制摄像头拍照并发邮件

    1 前言 为什么会有写这个程序的想法呢? 最初的想法是写一个可以用电脑前置摄像头拍照的程序,在舍友使用你电脑的时候,不经意间获取到一大堆奇葩舍友的表情包. 然后我又突发奇想,要不搞个开机启动吧,这样我 ...

  4. python实现摄像头拍照_使用Python控制摄像头拍照并发邮件

    o1 前言 为什么会有写这个程序的想法呢? 最初的想法是写一个可以用电脑前置摄像头拍照的程序,在舍友使用你电脑的时候,不经意间获取到一大堆奇葩舍友的表情包. 然后我又突发奇想,要不搞个开机启动吧,这样 ...

  5. Python黑客系列之——控制自己的手机摄像头拍照,并自动发送到邮箱。

    前言 嗨喽,大家好~今天教大家玩个花的,加入你手机被人偷了或者捡走了,那么如何找到这个人呢?通过定位系统可以,那么还有什么办法是可以让别人给你送回来的方法吗?这就是今天咱们的一个要实现的一个案例! 今 ...

  6. python控制网络摄像头_用Python控制摄像头拍照并发邮件

    码农那点事儿 关注我们,一起学习进步 00 概述 前言 工具 思路 安装及导入包 设置参数 实现拍照 构造邮件内容 发送邮件 判断网络连接 开机自启 后记 o1 前言 为什么会有写这个程序的想法呢? ...

  7. Python控制自己的手机摄像头拍照,并把照片自动发送到邮箱

    前言 今天这个案例,就是控制自己的摄像头拍照,并且把拍下来的照片,通过邮件发到自己的邮箱里. 想完成今天的这个案例,只要记住一个重点:你需要一个摄像头 思路 通过opencv调用摄像头拍照保存图像本地 ...

  8. python控制摄像头拍照_用Python控制摄像头拍照并发邮件

    1 前言 为什么会有写这个程序的想法呢? 最初的想法是写一个可以用电脑前置摄像头拍照的程序,在舍友使用你电脑的时候,不经意间获取到一大堆奇葩舍友的表情包. 然后我又突发奇想,要不搞个开机启动吧,这样我 ...

  9. 【Python】控制自己的手机摄像头拍照,并自动发送到邮箱

    前言 嗨喽,大家好呀~这里是爱看美女的茜茜呐 今天这个案例,就是控制自己的摄像头拍照, 并且把拍下来的照片,通过邮件发到自己的邮箱里. 想完成今天的这个案例,只要记住一个重点:你需要一个摄像头 思路 ...

最新文章

  1. 苹果回应“远程扫描用户相册”:声明被广泛误解,未设后门,功能仅美国可用...
  2. 电脑硬件故障的几种简单检查方法
  3. UI控件(UIToolbar)
  4. C# NHtmlFilter 帮你过滤Html危险脚本 防止XSS攻击
  5. VBA 自制 TreeView 树视图,附加控件 TreeView 最优替代方案
  6. Java Synchronized的用法
  7. Velocity 语法(转)
  8. 物联网是自动化还是计算机,物联网:自动化家里的一切
  9. MySQL卸载不干净问题,connector net卸不掉
  10. python编程100例海绵宝宝-Python_Turtle库画一只派大星
  11. lumion无法隐藏活动层_lumion是什么软件?想快速掌握 Lumion?快来拿走这份正确的入门教程!...
  12. 用VirtualBox创建虚拟机
  13. 苹果系统虚拟机无usb服务器,win10系统苹果电脑运行虚拟机后无法识别显示U盘的详细方案...
  14. 清火茶疗方 食疗灭四火
  15. 一天1个机器学习知识点(一)
  16. Ubuntu 设置多用户smba共享服务
  17. Java项目:基于Java药品管理系统(计算机毕业设计)
  18. FPS游戏中的同步算法
  19. gis插入的文本怎么搞成两行_怎么样制作标书?Word排版技巧大全,让标书制作更简单...
  20. 这几大挣钱方式,你能学会哪一种?

热门文章

  1. 计算机统考第五次作业操作题,计算机基础第5次作业 第五章 Powerpoint知识题(精选).docx...
  2. 【源码】基于Simulink的混合动力汽车模型
  3. 【转载】 历届Turing奖得主名单
  4. newwifi mini路由器固件openwrt
  5. 通过python实现安卓手机与stm32串口通信
  6. python中的headers是什么意思_python爬虫实战:request如何定义headers
  7. 中文分词下载IK Analyzer 2012FF_hf1
  8. linux下段错误相关资料-备查
  9. 腾达u6无线网卡 linux,腾达u6驱动-腾达u6无线网卡驱动下载 v1.0官方版--pc6下载站...
  10. 【2021/5/8发布适用】在 Windows 上架设 7 Days to Die 服务端(基于官方教程)