首页 > 解决方案 > 释放 VideoCapture(0) 并设置 kivy camera.play = True 后出现 Kivy-Python 错误

问题描述

    import numpy as np
import cv2
import time
import datetime
import math
from scipy.spatial import distance as dist


import os
import image_processing as imp

import kivy
from kivy.app import App
from kivy.uix.gridlayout import GridLayout
from kivy.uix.camera import Camera

class NoteCutterGrid(GridLayout):
    __mode = 1
    __auto_find = True
    __show_settings = False
    __sharpness = 30
    __grayscale = 0

    def take_photo(self):
        self.ids['camera'].play = False
        cap = cv2.VideoCapture(0)
        ret, frame = cap.read()
        cap.release()
        if ret:
            res = imp.image_processing(frame, (self.__mode - 1), self.__grayscale, self.__sharpness)
            for image in res:
                imp.save_image(image)
        self.ids['camera'].play = True

如果我不写self.ids['camera'].play = True,它会起作用image_processing,但应用程序中的相机仍然被冻结。我想在保存从 VideoCapture 拍摄的图像后解冻它,但它多次返回错误:

[错误] [OpenCV] 无法从相机获取图像

回溯(最近一次通话最后):

文件“C:\Users\Tioma\AppData\Local\Programs\Python\Python36\lib\site-packages\kivy\core\camera\camera_opencv.py”,第 139 行,在 _update

self._buffer = frame.imageData

AttributeError:“NoneType”对象没有属性“imageData”

在处理上述异常的过程中,又出现了一个异常:

回溯(最近一次通话最后):

文件“C:\Users\Tioma\AppData\Local\Programs\Python\Python36\lib\site-packages\kivy\core\camera\camera_opencv.py”,第 143 行,在 _update

self._buffer = frame.tostring()

AttributeError:“NoneType”对象没有属性“tostring”

标签: pythonopencvkivy

解决方案


推荐阅读