博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PyQt5 Opencv拍照
阅读量:7013 次
发布时间:2019-06-28

本文共 3441 字,大约阅读时间需要 11 分钟。

import sysfrom PyQt5 import QtCoreimport cv2from PyQt5 import QtGuifrom PyQt5.QtCore import QThreadfrom PyQt5.QtGui import QImagefrom PyQt5.QtWidgets import QApplication, QWidget, QHBoxLayout, QLabelfrom PyQt5.QtGui import QPixmapfrom PyQt5.QtWidgets import QPushButtondef getCameraNum():    """获取摄像头数量"""    num = 0    for i in range(0,5) :        # 从摄像头中取得视频        cap = cv2.VideoCapture(i)        if cap.isOpened():            num+=1        cap.release()    return numclass FrameThread(QThread):    imgLab = None    device = None    paizhao = 0    """摄像头拍照线程,摄像头拍照耗时较长容易卡住UI"""    def __init__(self,deviceIndex,imgLab):        QThread.__init__(self)        self.imgLab = imgLab        self.deviceIndex = deviceIndex        self.device = cv2.VideoCapture(self.deviceIndex)  # 从摄像头中取得视频        self.device.set(cv2.CAP_PROP_FRAME_WIDTH, 1600)        self.device.set(cv2.CAP_PROP_FRAME_HEIGHT, 1200)    def run(self):        if self.device.isOpened():            try:                while True:                    ret, frame = self.device.read()                    height, width, bytesPerComponent = frame.shape                    bytesPerLine = bytesPerComponent * width                    # 变换彩色空间顺序                    cv2.cvtColor(frame, cv2.COLOR_BGR2RGB, frame)                    # 转为QImage对象                    image = QImage(frame.data, width, height, bytesPerLine, QImage.Format_RGB888)                    if self.paizhao == 1:                        image.save("C:\\img"+str(self.deviceIndex)+".jpg")                        self.paizhao = 0                    pixmap = QPixmap.fromImage(image)                    pixmap = pixmap.scaled(400, 300, QtCore.Qt.KeepAspectRatio)                    self.imgLab.setPixmap(pixmap)            finally:                self.device.release()        # if self.cap.isOpened():        #     # 获取视频播放界面长宽        #     width = int(self.cap.get(cv2.CAP_PROP_FRAME_WIDTH) + 0.5)        #     height = int(self.cap.get(cv2.CAP_PROP_FRAME_HEIGHT) + 0.5)        #     # 定义编码器 创建 VideoWriter 对象        #     while (self.cap.isOpened()):        #         # 读取帧摄像头        #         ret, frame = self.cap.read()        #         image = QtGui.QImage(frame, width, height, QtGui.QImage.Format_Indexed8)        #         pixmap = QtGui.QPixmap.fromImage(image.mirrored(False, True))        #         # pixmap = QPixmap('C:\left.jpg')        #         self.imgLab.setPixmap(pixmap)    def destroyed(self, QObject=None):        self.device.release()class Example(QWidget):    def __init__(self):        super().__init__()        self.initUI()    def initUI(self):        hbox = QHBoxLayout(self)        lb1 = QLabel(self)        lb2 = QLabel(self)        btn = QPushButton(self)        btn.setText("拍照")        btn.clicked.connect(self.paizhao)        self.frameThread = FrameThread(0,lb1)        self.frameThread.start()        self.frameThread2 = FrameThread(1,lb2)        self.frameThread2.start()        hbox.addWidget(lb1)        hbox.addWidget(lb2)        hbox.addWidget(btn)        self.setLayout(hbox)        self.move(300, 300)        self.setWindowTitle('像素图控件')                self.show()    def paizhao(self):        self.frameThread.paizhao = 1        self.frameThread2.paizhao = 1    def showDate(self, date):        self.lb1.setText(date.toString())if __name__ == '__main__':    app = QApplication(sys.argv)    ex = Example()    sys.exit(app.exec_())

 

转载于:https://my.oschina.net/wjgood/blog/1573463

你可能感兴趣的文章
memcached命令行操作详解,命令选项的详细解释
查看>>
Linux pipe函数
查看>>
java msgbox
查看>>
发布两款JQ小插件(图片查看器 + 分类选择器),开源
查看>>
linux中的namespace
查看>>
动态规划0—1背包问题
查看>>
Linux命令-权限管理命令:chgrp
查看>>
这张表的字符串 在另一张表中是否存在
查看>>
【Win10 应用开发】解决VS 2015 RC不能调试手机应用的问题
查看>>
如何学习开源项目
查看>>
读书笔记3 Socket
查看>>
SQLiteParameter不能将TableName作为参数
查看>>
百度地图API学习总结
查看>>
tomcat发布web项目,支持域名
查看>>
webstom设置和monokia配色方案
查看>>
js和Jquery获取选中select值和文本
查看>>
Linux系统排查1——内存篇
查看>>
Java实现注册邮箱激活验证
查看>>
数据库缓存
查看>>
mvc 数据验证金钱格式decimal格式验证
查看>>