最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Pyqt5打開電腦攝像頭進行拍照的實現(xiàn)示例

 更新時間:2023年08月18日 08:26:56   作者:清純世紀  
本文介紹了如何使用Pyqt5來控制攝像頭拍照,通過構建一個簡單的用戶界面,我們可以實現(xiàn)從攝像頭實時獲取圖像,保存圖片,感興趣的可以了解一下

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, QtWidgets
class 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.translate
        mainWindow.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)                    # 創(chuàng)建窗體對象
        self.init()
        self.cap = cv2.VideoCapture()         # 初始化攝像頭
        self.photo_flag = 0
        self.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,要轉成RGB
        image_show = cv2.flip(image_show, 1)  # 水平翻轉,因為攝像頭拍的是鏡像的。
        # 把讀取到的視頻數(shù)據(jù)變成QImage形式(圖片數(shù)據(jù)、高、寬、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 = fname
        self.label_2.setPixmap(QPixmap(self.showImage).scaled(self.label_2.width(), self.label_2.height()))
if __name__ == '__main__':
    from PyQt5 import QtCore
    QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling)  # 自適應分辨率
    app = QtWidgets.QApplication(sys.argv)
    ui = Open_Camera()
    ui.show()
    sys.exit(app.exec_())

3、結果

參考:暫未成功人士

到此這篇關于Pyqt5打開電腦攝像頭進行拍照的實現(xiàn)示例的文章就介紹到這了,更多相關Pyqt5攝像頭拍照內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Python在類中強制規(guī)定編碼的高級開發(fā)指南

    Python在類中強制規(guī)定編碼的高級開發(fā)指南

    在Python開發(fā)中,??編碼約定??是保證代碼質(zhì)量和可維護性的關鍵因素,類作為面向對象編程的核心構造,其設計質(zhì)量直接影響整個系統(tǒng)的架構健康度,下面我們就來看看Python在類中強制規(guī)定編碼約定的各種技術吧
    2025-11-11
  • PyCharm進行Django項目開發(fā)環(huán)境搭建

    PyCharm進行Django項目開發(fā)環(huán)境搭建

    本文主要介紹了PyCharm進行Django項目開發(fā)環(huán)境搭建,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-02-02
  • python模擬鍵盤輸入 切換鍵盤布局過程解析

    python模擬鍵盤輸入 切換鍵盤布局過程解析

    這篇文章主要介紹了python模擬鍵盤輸入 切換鍵盤布局過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-08-08
  • python數(shù)字轉對應中文的方法總結

    python數(shù)字轉對應中文的方法總結

    在本篇文章里小編給大家分享的是一篇關于python數(shù)字轉對應中文的方法總結內(nèi)容,有興趣的朋友們可以跟著猜嘗試測試下。
    2021-08-08
  • Pandas之Fillna填充缺失數(shù)據(jù)的方法

    Pandas之Fillna填充缺失數(shù)據(jù)的方法

    這篇文章主要介紹了Pandas之Fillna填充缺失數(shù)據(jù)的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-06-06
  • Python中的Function定義方法

    Python中的Function定義方法

    Python中,函數(shù)是可被重用的程序段。對于函數(shù)的定義,可以使用def關鍵字。
    2009-09-09
  • Python動態(tài)導入模塊和反射機制詳解

    Python動態(tài)導入模塊和反射機制詳解

    這篇文章主要介紹了Python動態(tài)導入模塊和反射機制詳解,需要的朋友可以參考下
    2020-02-02
  • 從基礎到高級詳解DataFrame中時間序列操作的核心方法

    從基礎到高級詳解DataFrame中時間序列操作的核心方法

    時間序列數(shù)據(jù)是數(shù)據(jù)分析中最常見的類型之一,本文將系統(tǒng)介紹DataFrame中時間序列操作的核心方法,希望可以幫助大家掌握時間數(shù)據(jù)處理的全流程
    2026-02-02
  • 深度解析Python裝飾器常見用法與進階技巧

    深度解析Python裝飾器常見用法與進階技巧

    Python 裝飾器(Decorator)是提升代碼可讀性與復用性的強大工具,本文將深入解析 Python 裝飾器的原理,常見用法,進階技巧與最佳實踐,希望可以幫助大家寫出更具專業(yè)水準的 Python 代碼
    2025-06-06
  • 新版pycharm配置運行參數(shù)的教程/pycharm2023

    新版pycharm配置運行參數(shù)的教程/pycharm2023

    這篇文章主要介紹了新版pycharm配置運行參數(shù)的教程/pycharm2023,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01

最新評論

天等县| 玛沁县| 开原市| 中卫市| 莲花县| 镇雄县| 苏尼特左旗| 和龙市| 柳江县| 南雄市| 衡东县| 衡阳县| 兴山县| 永兴县| 宜阳县| 渑池县| 泰兴市| 山阴县| 西安市| 景泰县| 观塘区| 宽甸| 科技| 瓮安县| 原阳县| 讷河市| 山丹县| 齐河县| 新乐市| 天峨县| 临汾市| 盐源县| 青浦区| 易门县| 嵊泗县| 石屏县| 通州市| 仁寿县| 枣强县| 宁都县| 黄大仙区|