如何解决可能是 PySide2、QCamera、QAbstractVideoSurface 上的一个错误
我想从相机捕捉图像。我有办法做到这一点。但它在 PyQt5 上成功运行。在 pyside2 上失败。
import sys
from pyside2.QtWidgets import QWidget,QApplication
from pyside2.QtMultimedia import QCamera,QAbstractVideoSurface,QVideoSurfaceFormat,QVideoFrame
class CameraFrameGrabber(QAbstractVideoSurface):
def __init__(self,parent=None):
super(CameraFrameGrabber,self).__init__(parent)
print('init')
def supportedPixelFormats(self,type):
print("supportedPixelFormats() called")
print("supportedPixelFormats() finished")
return [QVideoFrame.Format_ARGB32,QVideoFrame.Format_ARGB32_Premultiplied,QVideoFrame.Format_RGB32,QVideoFrame.Format_RGB24,QVideoFrame.Format_RGB565,QVideoFrame.Format_RGB555,QVideoFrame.Format_ARGB8565_Premultiplied,QVideoFrame.Format_BGRA32,QVideoFrame.Format_BGRA32_Premultiplied,QVideoFrame.Format_BGR32,QVideoFrame.Format_BGR24,QVideoFrame.Format_BGR565,QVideoFrame.Format_BGR555,QVideoFrame.Format_BGRA5658_Premultiplied,QVideoFrame.Format_AYUV444,QVideoFrame.Format_AYUV444_Premultiplied,QVideoFrame.Format_YUV444,QVideoFrame.Format_YUV420P,QVideoFrame.Format_YV12,QVideoFrame.Format_UYVY,QVideoFrame.Format_YUYV,QVideoFrame.Format_NV12,QVideoFrame.Format_NV21,QVideoFrame.Format_IMC1,QVideoFrame.Format_IMC2,QVideoFrame.Format_IMC3,QVideoFrame.Format_IMC4,QVideoFrame.Format_Y8,QVideoFrame.Format_Y16,QVideoFrame.Format_Jpeg,QVideoFrame.Format_Cameraraw,QVideoFrame.Format_Adobedng]
# def isFormatSupported(self,format):
# print("isFormatSupported() called")
# def start(self,format):
# print("start() called")
def present(self,frame):
print('call present')
print(frame)
return True
# def stop(self):
# print("stop() called")
if __name__ == '__main__':
app = QApplication(sys.argv)
w = QWidget()
w.show()
w.setwindowTitle("Hello PyQt5")
the_camera = QCamera()
the_grabber = CameraFrameGrabber()
the_camera.setViewfinder(the_grabber)
the_camera.start()
sys.exit(app.exec_())
这是 PyQt5 代码
import sys
from PyQt5.QtWidgets import QWidget,QApplication
from PyQt5.QtMultimedia import QCamera,frame):
print('call present')
print(frame)
return True
# def stop(self):
# print("stop() called")
if __name__ == '__main__':
app = QApplication(sys.argv)
w = QWidget()
w.show()
w.setwindowTitle("Hello PyQt5")
the_camera = QCamera()
the_grabber = CameraFrameGrabber()
the_camera.setViewfinder(the_grabber)
the_camera.start()
sys.exit(app.exec_())
两个代码都运行成功。
目前在 PyQt5 中调用的函数,在 pyside2 中未调用。
谁能告诉我为什么会这样?谢谢。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。