线程未在python中打开目标函数
我想打开一个函数,通过调用cv2.imshow()方法在屏幕上显示加载的视频。 首先我想演示代码,然后是问题线程未在python中打开目标函数,python,python-3.x,multithreading,cv2,Python,Python 3.x,Multithreading,Cv2,我想打开一个函数,通过调用cv2.imshow()方法在屏幕上显示加载的视频。 首先我想演示代码,然后是问题 import cv2 import threading def Load(): video = cv2.VideoCapture('Loading.mov') if video.isOpened() == True: cv2.namedWindow("The Video") cv2.moveWindow("The Video",
import cv2
import threading
def Load():
video = cv2.VideoCapture('Loading.mov')
if video.isOpened() == True:
cv2.namedWindow("The Video")
cv2.moveWindow("The Video", 500,200)
elif video.isOpened() == False:
print('No Data For Loading Video')
return 0
while video.isOpened():
_, frame = video.read()
if _ == True:
cv2.imshow("The Video",frame)
if cv2.waitKey(10) & 0xff == 27:
break
if _ == False :
break
cv2.destroyAllWindows()
video.release()
t = threading.Thread(target = Load)
t.start()
现在,问题是:
当我第一次调用t.start()时,线程启动并正确显示视频。
循环中断后,如果我再次尝试将一个新的t
作为一个线程,并再次执行.start(),它将不会显示任何内容!不是错误,什么都不是
我正在使用spyder重新运行代码。
我想在需要的时候重新播放视频
现在,问题出在哪里了?我用mp4视频()尝试了你的代码,效果很好。我把视频转换成了mov,它仍然有效 尽管我可能有一个有根据的猜测: 您应该尝试使用cv2的新实例来执行每个调用 我假设问题可能是,线程的第二次调用继承了第一次调用的状态(特别是cv2的内部状态),因为它只是一个函数,因此视频处于“已播放”状态或其他状态,不会显示更多内容 因此,如果您将所有内容都放在一个类中,并在每次调用Load()时使用新的cv2实例进行调用,那么它可能会起作用
import cv2
import threading
class Video:
def play(self):
video = cv2.VideoCapture('small.mov')
if video.isOpened() == True:
cv2.namedWindow("The Video")
cv2.moveWindow("The Video", 500,200)
elif video.isOpened() == False:
print('No Data For Loading Video')
return 0
while video.isOpened():
_, frame = video.read()
if _ == True:
cv2.imshow("The Video",frame)
if cv2.waitKey(10) & 0xff == 27:
break
if _ == False :
break
cv2.destroyAllWindows()
video.release()
def Load():
v=Video()
v.play()
del v
t = threading.Thread(target = Load)
t.start()
当您清楚地使用变量时,为什么要命名它?如果…==正确:和
如果…==错误:
?这是大错特错的。