- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试编写一个自定义软件(在 python 中)以从图像采集卡中抓取帧 ( Hauppauge WinTV-HVR-1900 ),但我无法让它工作。捆绑的 WinTV 软件运行完美,我能够从 USB 网络摄像头抓取帧,所以我知道硬件工作正常。不过,我还是设法捕捉到了一些东西,因为我的屏幕是全黑的,但会更改为正确的尺寸和分辨率,所以我的直觉是这是某种解码问题。
谁能帮我指出或提供从此类硬件中提取帧的代码示例?我应该写一个完整的自定义驱动程序吗?或者也许使用 VLC python bindings (因为 VLC 确实成功读取了视频流)?
基本上,我的问题归结为:我的图像采集卡与网络摄像头有何不同,因为集成的硬件编码器产生 MPEG-2 流?不应该像我的网络摄像头一样工作?
我尝试的逻辑文件(在 Windows 7 上使用 pyQt4 和 python 2.7 的 QT 框架):
#-*- coding: utf-8 -*-
import sys
from VideoCapture import Device
#import Gui files and classes
import FloGui
import deviceDialog
# PyQT4 imports
from PyQt4 import QtGui, QtCore
class devicedialog(QtGui.QDialog, deviceDialog.Ui_streamDialog):
#the logic of the streaming device choice dialog
def __init__(self,parent=None):
super(devicedialog,self).__init__(parent)
self.setupUi(self)
self.retranslateUi(self)
self.index = None
i=0
self.camlist=list()
while True:
try:
cam = Device(i,0)
name = cam.getDisplayName()
dev = [name,i]
self.camlist.append(dev)
i+=1
del cam
except:
break
for j in xrange(len(self.camlist)):
item = QtGui.QListWidgetItem(self.camlist[j][0])
self.deviceListBox.addItem(item)
self.exec_()
def accept(self):
selected = self.deviceListBox.currentItem().text()
for k in xrange(len(self.camlist)):
if self.camlist[k][0]==selected:
self.index = k
QtGui.QDialog.accept(self)
class Flolog(QtGui.QMainWindow,FloGui.Ui_MainWindow):
"""
Flolog is inherited from both QtGui.QDialog and FloGui.Ui_MainWindow
"""
def __init__(self, parent=None):
"""
Initialization of the class. Call the __init__ for the super classes
"""
super(Flolog,self).__init__(parent)
self.setupUi(self)
self.retranslateUi(self)
self.connectActions()
def streamchoice(self):
streamdialog = devicedialog()
self.VideoWidget.stop()
self.VideoWidget.path = streamdialog.index
self.VideoWidget.load()
self.playButton.setEnabled(True)
def menuloadfile(self):
filename = QtGui.QFileDialog.getOpenFileName(self, 'Open File', '.')
self.VideoWidget.stop()
self.VideoWidget.path = str(filename)
self.VideoWidget.load()
self.playButton.setEnabled(True)
def playbutton(self):
self.VideoWidget.play()
self.playButton.setEnabled(False)
def main(self):
self.show()
def quit_(self):
sys.exit(0)
def connectActions(self):
"""
Connect the user interface controls to the logic
"""
self.actionFile.triggered.connect(self.menuloadfile)
self.actionStream.triggered.connect(self.streamchoice)
self.actionQuit.triggered.connect(self.quit_)
self.playButton.clicked.connect(self.playbutton)
self.stopButton.clicked.connect(self.VideoWidget.stop)
if __name__=='__main__':
app = QtGui.QApplication(sys.argv)
Flologob = Flolog()
Flologob.main()
sys.exit(app.exec_())
最佳答案
我终于解决了这个问题。问题源于这样一个事实,即首先应该手动或在代码中指定图形驱动程序应使用哪个视频设备。我通过 v4l2 图形驱动程序切换设备在 Linux Ubuntu 上解决了这个问题。我知道在 Windows 上可以执行等效操作。
关于python - 如何从图像采集卡中抓取帧?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20463824/
Nginx 日志可用于分析用户地址位置,行为画像等,如何通过 Elastic Stack 进行一站式的数据采集,数据清洗,数据落地,数据可视化,让数据发挥真正的价值呢? 架构设计 涉及到 El
我正在为 Directshow 编写自定义视频渲染过滤器。我的渲染器假定传入像素一次组织一行像素(正确的假设?)并使用 DirectX 纹理将它们 blits 到其他地方的另一个 DirectX 显示
我是一名优秀的程序员,十分优秀!