我正在尝试使用OpenCV处理图像时显示视频供稿。我已经有一个脚本使用OpenCV和Python进行图像处理,但是尝试将任何过滤器添加到VideoOutput
会导致分割错误。 documentation仅具有C ++的示例,但我试图完全在Python中复制它。
这是我的Python文件(example.py):
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_()
和QML(example.qml):
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
}
}
我添加了调试输出以尝试了解正在发生的情况,因为在“分段错误(核心已转储)”旁边未打印任何错误。在ExampleFilterRunnable
中实例化createFilterRunnable
之后且调用ExampleFilterRunnable::run
之前的某个时间段发生了分段错误。
我已经在具有不同视频卡,不同类型的视频和照相机源的不同计算机上运行了它,结果是相同的。如果我将filters: [filter]
中的VideoOutput
行注释掉,则视频会播放。