小编S. *_*hia的帖子

OpenCV(Python中的cv2)VideoCapture删除后不释放相机

我对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)

python opencv tkinter video-capture

5
推荐指数
1
解决办法
2万
查看次数

标签 统计

opencv ×1

python ×1

tkinter ×1

video-capture ×1