QTdesigner控件读取摄像头或图片显示到QLable

在图形界面中设置控件按钮,控制摄像头打开,并显示到界面的lable中。
一个简单的程序
class MyWindow(QtWidgets.QWidget, Ui_MainWindow): # 继承两个类,这两个类的构造函数都要执行

def __init__(self, MainWindow):
    super(MyWindow, self).__init__()
    self.setupUi(MainWindow)
    self._translate = QCoreApplication.translate   #对self._translate("MainWindow", "关闭摄像头")的_translate初始化
    self.detect.clicked.connect(self.show_message)
    self.timer_camera = QTimer(self)   #实时刷新,不然视频不动态显示
    self.timer_camera.timeout.connect(self.start_camera)  #连接到显示的槽函数,以上两步要在初始化中完成,**注意:timer_camera是对应的定时器函数**
    self.cap = cv2.VideoCapture(0)  #打开摄像头,在初始化中完成

def show_message(self):
    self.detect.setText(self._translate("MainWindow", "关闭摄像头"))
    self.timer_camera.start(0.01)  #先按下detect按钮,连接此槽函数,开启实时检测,再在初始化中设置开启实时检测需要连接的槽函数。如果把这行命令放在初始化当中,则程序一运行就会打开摄像头。是在按下了按钮之后,启动定时器,定时结束,触发图像显示事件

def start_camera(self):   #在detect按钮按下后,打开摄像头,实时读取图像并显示到界面的QLable中。
    ret, img = self.cap.read()
    height, width, depth = img.shape
    im = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)   #转成RGB
    im = QImage(im.data, width, height,
                width * depth, QImage.Format_RGB888)  #对读取到的im进行转换
    self.img_show.setPixmap(QPixmap.fromImage(im))   #用QPixmap.fromImage函数把im转换成可以放到QLable上的类型。

初步理解,有待完善。
是在按下了按钮之后,启动定时器,定时结束,触发图像显示事件
img = cv2.imread(“dog.png”) #读取本地图片并显示,与摄像头读取不同,是cv2.,而不是self.cv2. ,并且只需要一个返回值接受

构造函数QImage(sip.voidptr, int, int, int, QImage.Format),第三个int型参数表示的是每行有多少个字节,

使用 cv2.imread 读取的图片数据是 BGR 格式;

将两张图片进行拼接:

import cv2
import numpy as np
import pandas as pd
 
img1 = cv2.imread('Z1.jpg')
img2 = cv2.imread('Z2.jpg') 
#====使用numpy的数组矩阵合并concatenate======

image = np.concatenate((img1, img2)) 
# 纵向连接 image = np.vstack((img1, img2))
# 横向连接 image = np.concatenate([img1, img2], axis=1)


将图片相连接时可以不用转成灰度图,直接BGR就可以
转自
https://blog.csdn.net/sinat_21720047/article/details/95997085

res = cv2.resize(img, (640, 480), interpolation=cv2.INTER_CUBIC)   对图片裁剪

cv2.imwrite("/home/lyy/Desktop/li/dog1.png", res) 
路径要指定到图片的名称

你可能感兴趣的:(QTdesigner控件读取摄像头或图片显示到QLable)