Pyqt5打开电脑摄像头进行拍照

目录

1、设计UI界面

2、设计逻辑代码,建立连接显示窗口

3、结果


1、设计UI界面

将ui界面转为py文件后获得的逻辑代码为:(文件名为 Camera.py

# -*- coding: utf-8 -*-# Form implementation generated from reading ui file 'ca.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, QtWidgetsclass Ui_mainWindow(object):def setupUi(self, mainWindow):mainWindow.setObjectName("mainWindow")mainWindow.resize(648, 280)self.centralwidget = QtWidgets.QWidget(mainWindow)self.centralwidget.setObjectName("centralwidget")self.widget = QtWidgets.QWidget(self.centralwidget)self.widget.setGeometry(QtCore.QRect(10, 20, 631, 181))self.widget.setObjectName("widget")self.horizontalLayout = QtWidgets.QHBoxLayout(self.widget)self.horizontalLayout.setContentsMargins(0, 0, 0, 0)self.horizontalLayout.setObjectName("horizontalLayout")self.label = QtWidgets.QLabel(self.widget)font = QtGui.QFont()font.setPointSize(20)self.label.setFont(font)self.label.setAlignment(QtCore.Qt.AlignCenter)self.label.setObjectName("label")self.horizontalLayout.addWidget(self.label)self.label_2 = QtWidgets.QLabel(self.widget)font = QtGui.QFont()font.setPointSize(20)self.label_2.setFont(font)self.label_2.setAlignment(QtCore.Qt.AlignCenter)self.label_2.setObjectName("label_2")self.horizontalLayout.addWidget(self.label_2)self.widget1 = QtWidgets.QWidget(self.centralwidget)self.widget1.setGeometry(QtCore.QRect(10, 210, 631, 51))self.widget1.setObjectName("widget1")self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.widget1)self.horizontalLayout_2.setContentsMargins(0, 0, 0, 0)self.horizontalLayout_2.setObjectName("horizontalLayout_2")self.pushButton = QtWidgets.QPushButton(self.widget1)self.pushButton.setObjectName("pushButton")self.horizontalLayout_2.addWidget(self.pushButton)self.pushButton_2 = QtWidgets.QPushButton(self.widget1)self.pushButton_2.setObjectName("pushButton_2")self.horizontalLayout_2.addWidget(self.pushButton_2)self.pushButton_3 = QtWidgets.QPushButton(self.widget1)self.pushButton_3.setObjectName("pushButton_3")self.horizontalLayout_2.addWidget(self.pushButton_3)self.pushButton_4 = QtWidgets.QPushButton(self.widget1)self.pushButton_4.setObjectName("pushButton_4")self.horizontalLayout_2.addWidget(self.pushButton_4)mainWindow.setCentralWidget(self.centralwidget)self.retranslateUi(mainWindow)QtCore.QMetaObject.connectSlotsByName(mainWindow)def retranslateUi(self, mainWindow):_translate = QtCore.QCoreApplication.translatemainWindow.setWindowTitle(_translate("mainWindow", "MainWindow"))self.label.setText(_translate("mainWindow", "摄像头"))self.label_2.setText(_translate("mainWindow", "采集图像"))self.pushButton.setText(_translate("mainWindow", "打开摄像头"))self.pushButton_2.setText(_translate("mainWindow", "采集图像"))self.pushButton_3.setText(_translate("mainWindow", "关闭摄像头"))self.pushButton_4.setText(_translate("mainWindow", "打开图像"))

2、设计逻辑代码,建立连接显示窗口

逻辑代码如下:(文件名为Camera_main.py

# here put the import lib
import sys
from PyQt5 import QtGui, QtWidgets
from Camera import Ui_mainWindow
import cv2
import time
from PyQt5.Qt import *class Open_Camera(QtWidgets.QMainWindow, Ui_mainWindow):def __init__(self):super(Open_Camera, self).__init__()self.setupUi(self)                    # 创建窗体对象self.init()self.cap = cv2.VideoCapture()         # 初始化摄像头self.photo_flag = 0self.label.setScaledContents(True)    # 图片自适应self.label_2.setScaledContents(True)  # 图片自适应def init(self):# 定时器让其定时读取显示图片self.camera_timer = QTimer()self.camera_timer.timeout.connect(self.show_image)# 打开摄像头self.pushButton.clicked.connect(self.open_camera)# 拍照self.pushButton_2.clicked.connect(self.taking_pictures)# 关闭摄像头self.pushButton_3.clicked.connect(self.close_camera)# 导入图片self.pushButton_4.clicked.connect(self.loadphoto)# 开启摄像头def open_camera(self):self.cap = cv2.VideoCapture(0)  # 摄像头self.camera_timer.start(40)     # 每40毫秒读取一次,即刷新率为25帧self.show_image()# 显示图片def show_image(self):flag, self.image = self.cap.read()  # 从视频流中读取图片width,height,_ = self.image.shape # 行:宽,列:高ratio1 = width / self.label.width()  # (label 宽度)ratio2 = height / self.label.height()  # (label 高度)ratio = max(ratio1, ratio2)image_show = cv2.cvtColor(self.image, cv2.COLOR_BGR2RGB)  # opencv读的通道是BGR,要转成RGBimage_show = cv2.flip(image_show, 1)  # 水平翻转,因为摄像头拍的是镜像的。# 把读取到的视频数据变成QImage形式(图片数据、高、宽、RGB颜色空间,三个通道各有2**8=256种颜色)self.showImage = QtGui.QImage(image_show.data, height, width, QImage.Format_RGB888)self.showImage.setDevicePixelRatio(ratio) # 按照缩放比例自适应 label 显示self.label.setPixmap(QPixmap.fromImage(self.showImage))  # 往显示视频的Label里显示QImage# self.label.setScaledContents(True) # 图片自适应# 拍照def taking_pictures(self):if self.cap.isOpened():FName = fr"images/cap{time.strftime('%Y%m%d%H%M%S', time.localtime())}"print(FName)self.label_2.setPixmap(QtGui.QPixmap.fromImage(self.showImage))# self.showImage.save(FName + ".jpg", "JPG", 100)self.showImage.save('./1.jpg')else:QMessageBox.critical(self, '错误', '摄像头未打开!')return None# 关闭摄像头def close_camera(self):self.camera_timer.stop()  # 停止读取self.cap.release()  # 释放摄像头self.label.clear()  # 清除label组件上的图片self.label_2.clear()  # 清除label组件上的图片self.label.setText("摄像头")# self.cap = cv2.VideoCapture(0, cv2.CAP_DSHOW)  # 摄像头# 导入图片def loadphoto(self):fname, _ = QFileDialog.getOpenFileName(self, '选择图片', '../', 'Image files(*.jpg *.gif *.png*.bmp)')self.showImage = fnameself.label_2.setPixmap(QPixmap(self.showImage).scaled(self.label_2.width(), self.label_2.height()))if __name__ == '__main__':from PyQt5 import QtCoreQtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling)  # 自适应分辨率app = QtWidgets.QApplication(sys.argv)ui = Open_Camera()ui.show()sys.exit(app.exec_())

3、结果

参考:暂未成功人士

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/81437.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++,运算符重载——关系运算符练习

一、关系运算符重载 > > < < ! #include <iostream> using namespace std;class Relates { private:int a;int b; public:Relates() {}Relates(int a,int b):a(a),b(b) {}bool operator>(const Relates &R) const{if((a>R.a&&b>R.b) …

docker 安装oracle19c linux命令执行sql

docker安装oracle # 下载镜像 19.3.0.0.0 docker pull registry.cn-hangzhou.aliyuncs.com/laowu/oracle:19c # 创建文件 mkdir -p /home/mymount/oracle19c/oradata # 授权&#xff0c;不授权会导致后面安装失败 chmod 777 /home/mymount/oracle19c/oradatadocker run -d \ …

Java8 Stream流常用方法

1、Stream流思想 Stream流的三类方法 获取Stream流 创建一条流水线,并把数据放到流水线上准备进行操作 中间方法 流水线上的操作 一次操作完毕之后,还可以继续进行其他操作 终结方法 一个Stream流只能有一个终结方法 是流水线上的最后一个操作 生成Stream流的方式 Collect…

ELFNet: Evidential Local-global Fusion for Stereo Matching

论文地址&#xff1a;https://arxiv.org/pdf/2308.00728.pdf 源码地址&#xff1a;https://github.com/jimmy19991222/ELFNet 概述 针对现有立体匹配模型面临可靠性和跨域泛化的问题&#xff0c;本文提出了Evidential Local-global Fusion&#xff08;ELF&#xff09;框架&…

AS中回退git历史版本并删除历史提交记录

当您想把某个版本后的代码删除&#xff0c;回滚到指定的版本。可以使用一下的方法。 一、打开AS中git历史提交窗口 二、选择需要回滚的版本选项&#xff0c;右键弹出菜单。选择Reset Current Branch to Here... 三、选择 Hard 选项 soft&#xff1a;将合并的更改应用到当前分支…

常用的数据可视化工具有哪些?要操作简单的

随着数据量的剧增&#xff0c;对分析效率和数据信息传递都带来了不小的挑战&#xff0c;于是数据可视化工具应运而生&#xff0c;通过直观形象的图表来展现、传递数据信息&#xff0c;提高数据分析报表的易读性。那么&#xff0c;常用的操作简单数据可视化工具有哪些&#xff1…

VMware虚拟机连不上网络

固定ip地址 进入网络配置文件 cd /etc/sysconfig/network-scripts 打开文件 vi ifcfg-ens33 编辑 BOOTPROTO设置为static&#xff0c;有3个值&#xff08;decp、none、static&#xff09; BOOTPROTO"static" 打开网络 ONBOOT"yes" 固定ip IPADDR1…

0基础学习VR全景平台篇 第88篇:智慧眼-成员管理

一、功能说明 成员管理&#xff0c;是指管理智慧眼项目的成员&#xff0c;拥有相关权限的人可以进行添加成员、分配成员角色、设置成员分类、修改成员以及删除成员五项操作。但是仅限于管理自己的下级成员&#xff0c;上级成员无权管理。 二、前台操作页面 登录智慧眼后台操…

一、MQ的基本概念

1、初识MQ MQ全称是Message Queue&#xff0c;消息队列&#xff0c;多用于系统之间进行异步通信。队列的概念数据结构中有详细介绍过&#xff0c;先进先出&#xff0c;消息队列就是存储消息的数据结构。 同步调用和异步调用两者之间的区别&#xff1a; 同步调用&#xff1a;发…

分类预测 | MATLAB实现S4VM半监督支持向量机二分类预测

分类预测 | MATLAB实现S4VM半监督支持向量机二分类预测 目录 分类预测 | MATLAB实现S4VM半监督支持向量机二分类预测分类效果基本介绍程序设计参考资料 分类效果 基本介绍 分类预测 | MATLAB实现S4VM半监督支持向量机二分类预测 程序设计 完整源码和数据获取方式&#xff1a; …

Python 密码破解指南:15~19

协议&#xff1a;CC BY-NC-SA 4.0 译者&#xff1a;飞龙 本文来自【OpenDocCN 饱和式翻译计划】&#xff0c;采用译后编辑&#xff08;MTPE&#xff09;流程来尽可能提升效率。 收割 SB 的人会被 SB 们封神&#xff0c;试图唤醒 SB 的人是 SB 眼中的 SB。——SB 第三定律 十五、…

学会Mybatis框架:一文掌握MyBatis与GitHub插件分页的完美结合【三.分页】

&#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于Mybatis的相关操作吧 目录 &#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 一.Mybatis分页 1. Mybatis自带分页 2…