Python QVideoFilterRunnable导致PySide2出现分段错误
我试图在使用OpenCV处理图像时显示视频提要。我已经有了一个使用OpenCV和Python进行图像处理的脚本,但是尝试向Python QVideoFilterRunnable导致PySide2出现分段错误,python,qml,pyside2,qvideofilterrunnable,Python,Qml,Pyside2,Qvideofilterrunnable,我试图在使用OpenCV处理图像时显示视频提要。我已经有了一个使用OpenCV和Python进行图像处理的脚本,但是尝试向视频输出添加任何过滤器会导致分割错误。只有C++的例子,但是我已经尝试用Python来复制它。 这是我的Python文件(example.py): 以及QML(example.QML): 我添加了调试输出,试图了解发生了什么,因为在“分段错误(内核转储)”旁边没有打印错误。分段错误发生在createFilterRunnable中实例化ExampleFilterRunnable
视频输出添加任何过滤器会导致分割错误。只有C++的例子,但是我已经尝试用Python来复制它。
这是我的Python文件(example.py):
以及QML(example.QML):
我添加了调试输出,试图了解发生了什么,因为在“分段错误(内核转储)”旁边没有打印错误。分段错误发生在createFilterRunnable
中实例化ExampleFilterRunnable
之后,调用ExampleFilterRunnable::run
之前
我在不同的电脑上用不同的显卡,不同类型的视频和摄像头输入运行了它,结果是一样的。如果我注释掉VideoOutput
中的filters:[filter]
行,视频将播放。这似乎实际上可能是PySide2中的一个bug:
from PySide2.QtWidgets import QApplication
from PySide2.QtQml import qmlRegisterType
from PySide2.QtQuick import QQuickView
from PySide2.QtMultimedia import QAbstractVideoFilter, QVideoFilterRunnable
from PySide2.QtCore import QUrl
class ExampleFilterRunnable(QVideoFilterRunnable):
def run(self, frame, surfaceFormat, flags):
return frame
class ExampleFilter(QAbstractVideoFilter):
def createFilterRunnable(self):
return ExampleFilterRunnable()
app = QApplication([])
qmlRegisterType(ExampleFilter, "ExampleFilter", 1, 0, "ExampleFilter")
view = QQuickView()
url = QUrl("example.qml")
view.setSource(url)
view.setResizeMode(view.SizeRootObjectToView)
view.show()
app.exec_()
import QtQuick 2.0
import QtQuick.Controls 2.3
import QtMultimedia 5.8
import ExampleFilter 1.0
Rectangle {
id: rectangle
width: 800
height: 600
color: "black"
ExampleFilter {
id: filter
}
MediaPlayer {
id: player
source: "https://archive.org/download/Mario1_500/Mario1_500_LQ.avi"
autoPlay: true
}
VideoOutput {
id: videoOutput
source: player
filters: [filter]
anchors.fill: parent
}
}