Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/322.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 GUI中播放任何视频文件_Python_Opencv_Tkinter - Fatal编程技术网

不在python GUI中播放任何视频文件

不在python GUI中播放任何视频文件,python,opencv,tkinter,Python,Opencv,Tkinter,以下代码用于打开文件对话框。但它不播放任何视频文件 它只返回视频文件地址,但不播放文件 from Tkinter import Tk import cv2 import numpy as np from tkFileDialog import askopenfilename Tk().withdraw() filename = askopenfilename() print(filename) cap = cv2.VideoCapture(filename) print(cap) prin

以下代码用于打开
文件对话框
。但它不播放任何视频文件

它只返回视频文件地址,但不播放文件

from Tkinter import Tk
import cv2
import numpy as np
from tkFileDialog import askopenfilename

Tk().withdraw()
filename = askopenfilename() 

print(filename)
cap = cv2.VideoCapture(filename)
print(cap)
print(cap.isOpened())

while(cap.isOpened()):
  ret, frame = cap.read()

gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

cv2.imshow('frame',gray)
if cv2.waitKey(1) & 0xFF == ord('q'):
    break

cap.release()
cv2.destroyAllWindows()

有了Tkinter和OpenCV,这段代码对我很有用

如果我使用的是.avi和.mpg格式,.mov和.mp4只需打印文件路径

from Tkinter import Tk
from tkFileDialog import askopenfilename

import cv2

Tk().withdraw()
filename = askopenfilename()
print(filename)

cap = cv2.VideoCapture(filename)

while cap.isOpened():
    ret, frame = cap.read()
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    cv2.imshow('frame', gray)
    if cv2.waitKey(250) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()
或者, 您可以使用(跨平台GUI的Python绑定)在Python GUI中播放视频

下面是一个简单的例子:

from PyQt4 import QtGui
from PyQt4 import phonon


class Window(QtGui.QWidget):
    def __init__(self):
        QtGui.QWidget.__init__(self)
        self.resize(960, 540)
        layout = QtGui.QGridLayout(self)
        player = phonon.Phonon.VideoPlayer(self)
        filename = QtGui.QFileDialog.getOpenFileName()
        media = phonon.Phonon.MediaSource(filename)
        player.load(media)
        player.play()
        layout.addWidget(player)


if __name__ == '__main__':
    import sys
    app = QtGui.QApplication(sys.argv)
    win = Window()
    win.show()
    sys.exit(app.exec_())

我认为问题在于你的帧速率。您将其设置为0.001秒,因此可能您的视频结束得非常快。尝试增加它:

from tkinter import Tk
from tkinter import filedialog
import cv2

Tk().withdraw()
filename = filedialog.askopenfilename() 
print(filename)

cap = cv2.VideoCapture(filename)
while(cap.isOpened()):
    ret, frame = cap.read()
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    cv2.imshow('frame',gray)
    if cv2.waitKey(250) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

补充说这是一个大学项目对你的causecv2是一个python的开源库代码缩进不正确,当
break
在while循环之外时,它甚至不应该运行。请修复它。谢谢你,先生,但是有没有办法使用opencv和tkinterThank玩呢?谢谢你,先生。但是我如何增加它。另外,它为cap.isOpened()显示了错误的值。如何使其为真。那么问题是您的视频文件无法正确打开,可能是不支持的格式。无论如何,要更改帧速率设置
cv2.waitkey(250)
。先生,我已经更改了帧速率。但是这并没有帮助,while循环没有工作。因为它返回的是假值。这是从网络摄像头捕获的视频文件