weixin_50822407 2021-08-27 16:25 采纳率: 100%
浏览 372
已结题

python pyqt5 多lable显示相机 点击窗口全屏,缩放回去后画面比例变形

相机设置自适应画面宽高
设置的是双击lable框后lable弹出窗全屏显示,再次双击后回到父窗口后,比例变形

img

img


        camid=[
0,1,2,3,4,5
]
        for i in camid:
            cap1  = cv2.VideoCapture(i)
            cap.append(cap1)
        zu = [self.tv1,self.tv2,self.tv3,self.tv4,self.tv5,self.tv6,self.tv7,self.tv8,self.tv9,self.tv10]
        self.guan1 = False
        self.guan = True
        while True:
            for (a,tv)in zip(cap,zu):#a为相机端号,zu为lable画面数组
                ret,image = a.read()
                if tv.height() > tv.width():
                    width = tv.width()
                    height = int(image.shape[0] * (width / image.shape[1]))
                else:
                    height = tv.height()
                    width = int(image.shape[1] * (height / image.shape[0]))
                show = cv2.resize(image,(width,height))
                show = cv2.cvtColor(show,cv2.COLOR_BGR2RGBA) #视频色彩转换回RGB,这样才是现实的颜色
                showImage = QtGui.QImage(show.data,show.shape[1],show.shape[0],QtGui.QImage.Format_RGBA8888 ) #把读取到的视频数据变成QImage形式
                # tv.setScaledContents (True)#自适应lable
                tv.setPixmap(QtGui.QPixmap.fromImage(showImage))  #往显示视频的Label里 显示QImage
                tv.setAlignment(QtCore.Qt.AlignCenter)#居中
                tv.setVisible(True)#窗口显示
                self.pushButton_5.setText("关闭相机")

class myLabel(QtWidgets.QLabel):
    sinh = QtCore.pyqtSignal(int)
    sinw = QtCore.pyqtSignal(int)
    def __init__(self,labelsuofang):
        super(myLabel,self).__init__()
        self.flag = True
    def mouseDoubleClickEvent(self, event):#鼠标点击
        if self.flag == True:
            self.w = self.width()
            self.h = self.height()
            print(self.w,self.h)
            self.setWindowFlags(QtCore.Qt.Window) #使得label位于最高级别的窗口
            self.showFullScreen()  #全屏显示
            # self.setScaledContents (True)
            self.flag = False
        else:
            print(self.w,self.h)
            self.setWindowFlags(QtCore.Qt.SubWindow)   #使得label回到子窗口级别
            self.showNormal()   #恢复label原本大小
            self.resize(self.w,self.h)   #使得label宽高恢复原样
            # self.setScaledContents (False)
            self.flag = True

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 9月4日
    • 创建了问题 8月27日

    悬赏问题

    • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
    • ¥15 TLE9879QXA40 电机驱动
    • ¥15 clion的参数提示怎么关闭
    • ¥20 对于工程问题的非线性数学模型进行线性化
    • ¥15 Mirare PLUS 进行密钥认证?(详解)
    • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
    • ¥20 想用ollama做一个自己的AI数据库
    • ¥15 关于qualoth编辑及缝合服装领子的问题解决方案探寻
    • ¥15 请问怎么才能复现这样的图呀
    • ¥15 mifare plus卡认证