【发布时间】:2013-04-03 13:03:18
【问题描述】:
我正在尝试读取 2 个视频文件并同时在单独的 Windows 中显示它们。 这是我的代码:
import threading
import cv2
threadLock=threading.Lock()
class myThread (threading.Thread):
maxRetries=20
def __init__(self, threadID, name,video_url):
threading.Thread.__init__(self)
self.threadID = threadID
self.name = name
self.video_url=video_url
def attemptRead(self,cvVideo):
threadLock.acquire()
(isRead,cvImage)=cvVideo.read()
threadLock.release()
if isRead==False:
count=1
while isRead==False and count<myThread.maxRetries:
threadLock.acquire()
(isRead,cvImage)=cvVideo.read()
threadLock.release()
print self.name+' try no: ',count
count+=1
return (isRead,cvImage)
def run(self):
print "Starting " + self.name
windowName = self.name
cv2.namedWindow(windowName)
cvVideo = cv2.VideoCapture(self.video_url)
while True:
(isRead,cvImage)=self.attemptRead(cvVideo)
if isRead==False:
break
cv2.imshow(windowName,cvImage)
key=cv2.waitKey(50)
if key==27:
break
cv2.destroyWindow(windowName)
print self.name + "Exiting"
def main():
thread1 = myThread(1, "Thread1",'C:/Traffic Pics/Videos/Panjim Capture.mp4')
thread2 = myThread(2, "Thread2",'C:/Traffic Pics/Videos/Miramar Capture.mp4')
thread1.start()
thread2.start()
print "Exiting Main Thread"
if __name__ == '__main__':
main()
发生的情况是,只有 线程 2 窗口显示。 线程 1 在尝试读取超出 max_retries 限制(在我的情况下为 10)的视频后退出。 问题是虽然我创建了单独的 cvVideo 对象,但我似乎无法同时使用它们。 可能是什么问题?
【问题讨论】:
-
只是一个基本问题,但您是否首先让视频阅读/显示代码在单个线程中工作?可以发一下吗?
-
哦,是的.. 单个线程运行良好。代码将完全相同。只需评论 thread2.start() 我什至在我的问题中提到“一个窗口正在显示”。
-
我终于在示例文件夹中找到了
tree.avi。我让两个视频都可以正常运行,然后在视频结束后继续尝试阅读...您确定您的两个路径都有效吗?尝试交换文件名,看看是否显示另一个视频窗口。 -
我尝试了不同的视频和不同的格式。对我有用的只是示例文件夹中的 tree.avi。为什么是这样?我尝试了 .wmv 和 .mp4 格式,但多线程不起作用。有人能解释一下为什么吗?
-
你能链接到一些短的 wmv 或 mp4 视频文件吗?我无法挖掘 opencv 可以读取的任何内容。
标签: python multithreading opencv