Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python QVideoFilterRunnable导致PySide2出现分段错误_Python_Qml_Pyside2_Qvideofilterrunnable - Fatal编程技术网

Python QVideoFilterRunnable导致PySide2出现分段错误

Python QVideoFilterRunnable导致PySide2出现分段错误,python,qml,pyside2,qvideofilterrunnable,Python,Qml,Pyside2,Qvideofilterrunnable,我试图在使用OpenCV处理图像时显示视频提要。我已经有了一个使用OpenCV和Python进行图像处理的脚本,但是尝试向视频输出添加任何过滤器会导致分割错误。只有C++的例子,但是我已经尝试用Python来复制它。 这是我的Python文件(example.py): 以及QML(example.QML): 我添加了调试输出,试图了解发生了什么,因为在“分段错误(内核转储)”旁边没有打印错误。分段错误发生在createFilterRunnable中实例化ExampleFilterRunnable

我试图在使用OpenCV处理图像时显示视频提要。我已经有了一个使用OpenCV和Python进行图像处理的脚本,但是尝试向
视频输出添加任何过滤器会导致分割错误。只有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
    }
}