You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Qt相机取景器上叠加透明图片?树莓派兼容性问题

问题:QCameraViewfinder叠加透明图片在树莓派4上失效,自定义paintEvent导致视频丢失

我尝试在QCameraViewfinder上叠加带有透明效果的图片,以下代码在Windows系统运行正常,但在树莓派4上透明效果失效。我在树莓派4上使用PySide2 5.11.2版本,已尝试过透明PNG和SVG文件。作为替代方案,当我使用paintEvent绘制图形时,取景器无法显示视频,同时附上相关代码和Windows 11、树莓派4的效果对比图。

初始实现代码

from PySide2.QtMultimedia import QCamera, QCameraInfo
from PySide2.QtMultimediaWidgets import QCameraViewfinder

from PySide2 import QtCore, QtGui
from PySide2.QtWidgets import *
from PySide2.QtGui import *
from PySide2.QtCore import *
import sys

class ExampleWindow(QMainWindow):
    def __init__(self, windowsize):
        super().__init__()
        self.windowsize = windowsize
        self.initUI()

    def initUI(self):
        self.setFixedSize(self.windowsize)

        widget = QWidget()
        self.setCentralWidget(widget)

        self.view_finder = QCameraViewfinder()
        camerainfo = QCameraInfo.availableCameras()[0]
        self.camera = QCamera(camerainfo)
        self.camera.setViewfinder(self.view_finder)
        self.camera.start()
        
        layout_box = QHBoxLayout(widget)
        layout_box.setContentsMargins(0, 0, 0, 0)
        layout_box.addWidget(self.view_finder)

        pixmap = QPixmap('crosshair3.png')
        self.image = QLabel(widget)
        self.image.setPixmap(pixmap)
        self.image.setFixedSize(pixmap.size())

        hw = pixmap.size().width()/2
        hh = pixmap.size().height()/2

        self.image.move(self.rect().center().x()-hw, self.rect().center().y()-hh)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    screensize = app.desktop().availableGeometry().size()

    ex = ExampleWindow(screensize)
    ex.show()

sys.exit(app.exec_())

使用QPainter的代码(取景器无视频)

class MyQCameraViewfinder(QCameraViewfinder):
    def __init__(self, parent=None):
        super().__init__(parent)
    
    def paintEvent(self, event):
        paint = QtGui.QPainter()
        paint.begin(self)

        paint.setRenderHint(QtGui.QPainter.Antialiasing)
        paint.setPen(QtCore.Qt.black)
        paint.setBrush(QtCore.Qt.white)   
        paint.drawEllipse(QtCore.QRect(17, 22, 50, 50)) 

        paint.end()    

效果对比

  • Windows 11效果:Windows 11上的叠加效果
  • 树莓派4效果:树莓派4上的叠加效果

内容的提问来源于stack exchange,提问作者ramiwi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 18:28:01