我对Python比较陌生,只是在过去一个月左右的时间里学到了它,并根据我在网上找到的示例和其他代码一起攻击了它.
我已经获得了一个Tkinter GUI来显示来自网络摄像头的馈送,作为画布上不断更新的图像的循环.退出GUI并每隔一次重新运行脚本会导致此错误:
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Python27\lib\lib-tk\Tkinter.py", line 1410, in __call__
return self.func(*args)
File "C:\Python27\lib\lib-tk\Tkinter.py", line 495, in callit
func(*args)
File "C:\...\cv2_cam_v8.py", line 20, in update_video
(self.readsuccessful,self.f) = self.cam.read()
SystemError: NULL object passed to Py_BuildValue
Run Code Online (Sandbox Code Playgroud)
发生错误时,不会读取任何图像,并且视频片段不会收到任何图像来更新画布.脚本正常运行,第一次和第二次没有错误.从之前使用cv2模块中的VideoCapture函数进行的测试,我发现我必须删除相机对象以释放它,以便后续运行能够捕获相机流而没有任何问题.通过键入who控制台检查命名空间不显示cam所以我知道在GUI关闭后它被正确删除.我不明白为什么cv2的读取功能会出错.我认为它只是每隔一次发生一次,因为当错误发生时,一些垃圾收集或错误处理删除或释放与相机有关的东西,但我不知道这是什么...
这是我的代码:
import cv2
import Tkinter as tk
from PIL import Image, ImageTk
class vid():
def __init__(self,cam,root,canvas):
self.cam = cam
self.root = root
self.canvas = canvas
def update_video(self):
(self.readsuccessful,self.f) = self.cam.read()
self.gray_im = cv2.cvtColor(self.f, …Run Code Online (Sandbox Code Playgroud)