label读取摄像头 pyqt5_pyqt5 使用cv2 显示图片,摄像头的实例

本文展示了如何使用PyQt5和OpenCV读取并显示摄像头的实时图像。通过创建一个QThread子类`Timer`来实现定时更新图像,并在QMainWindow窗口中显示。代码中用到了`cv2.VideoCapture`来获取摄像头帧,然后转换为QImage对象,最终在窗口上显示。
摘要由CSDN通过智能技术生成

#! /usr/bin/python3

# coding = utf-8

# from PyQt5 import QtGui,QtCore,Qt

import sys

from PyQt5.QtCore import Qt,pyqtSignal,QSize,QRect,QMetaObject, QCoreApplication, pyqtSlot,QPropertyAnimation,QThread

from PyQt5.QtGui import QIcon, QFont, QPixmap, QPainter, QImage

from PyQt5.QtWidgets import QMainWindow, QApplication

import cv2

from gevent.libev.corecext import SIGNAL, time

from qtpy importQtCore

class mycsms(QMainWindow):

def __init__(self):

super(mycsms, self).__init__()

self.setupUi(self)

self.image= QImage()

self.device= cv2.VideoCapture(0)

self.playTimer= Timer("updatePlay()")

self.connect(self.playTimer, SIGNAL("updatePlay()"), self.showCamer)

# 读摄像头

def showCamer(self):

if self.device.isOpened():

ret, frame= self.device.read()

else:

ret = False

# 读写磁盘方式

# cv2.imwrite("2.png",frame)

#self.image.load("2.png")

height, width, bytesPerComponent= frame.shape

bytesPerLine = bytesPerComponent* width

# 变换彩色空间顺序

cv2.cvtColor(frame, cv2.COLOR_BGR2RGB,frame)

# 转为QImage对象

self.image= QImage(frame.data, width, height, bytesPerLine, QImage.Format_RGB888)

self.view.setPixmap(QPixmap.fromImage(self.image))

if __name__ == "__main__":

app = QApplication(sys.argv)

myshow = mycsms()

myshow.playTimer.start()

myshow.show()

sys.exit(app.exec_())

# 线程类:

class Timer(QtCore.QThread):

def __init__(self, signal="updateTime()", parent=None):

super(Timer, self).__init__(parent)

self.stoped= False

self.signal= signal

self.mutex= QtCore.QMutex()

def run(self):

with QtCore.QMutexLocker(self.mutex):

self.stoped= False

while True:

if self.stoped:

return

self.emit(QtCore.SIGNAL(self.signal))

#40毫秒发送一次信号

time.sleep(0.04)

def stop(self):

with QtCore.QMutexLocker(self.mutex):

self.stoped= True

def isStoped(self):

with QtCore.QMutexLocker(self.mutex):

return self.stoped

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值