python - 如何使用面向对象的 OpenCV

标签 python opencv

因此,我创建了一个类来打开 VideoCapture() 并使用 opencv 读取帧。

import cv2
import imutils
class Camera():
    def __init__(self):
        self.cap = cv2.VideoCapture(0)  # Prepare the camera...
        print("Camera warming up ...")
        self.ret, self.frame = self.cap.read()

    def get_frame(self):
        self.frames = open("stream.jpg", 'wb+')
        s, img = self.cap.read()
        if s:  # frame captures without errors...
           cv2.imwrite("stream.jpg", img)  # Save image...
        return self.frames.read()


def main():
    while True:
        cam1 = Camera().get_frame()
        frame = imutils.resize(cam1, width=640)
        cv2.imshow("Frame", frame)

    return ()

if __name__ == '__main__':
    main()

这给了我错误:

(h, w) = image.shape[:2] AttributeError:'bytes'对象没有属性'shape'

此外,当我删除 get_frame 函数并直接创建一个如下所示的构造函数时:

 cam1 = Camera()
 frame = imutils.resize(cam1.frame, width=640)

相机对象是递归创建的。有人可以帮助解决我在这里做错的事情吗?

最佳答案

您的代码存在一些问题:

  1. 无需在__init__(self)函数中初始化相机。为什么?您已经在 get_frame(self) 中调用它。
  2. 在函数get_frame(self)中,最后返回self.frames.read()。您应该返回由 self.cap.read() 捕获的图像。这导致了 AttributeError
  3. 我还添加了 Camera().release_camera() 以在执行结束后关闭网络摄像头。

这是重组后的代码(我没有使用 imutils,我只是使用 cv2.resize()):

import cv2
class Camera():
    def __init__(self):
        self.cap = cv2.VideoCapture(0)  # Prepare the camera...
        print("Camera warming up ...")


    def get_frame(self):

        s, img = self.cap.read()
        if s:  # frame captures without errors...

            pass

        return img

    def release_camera(self):
        self.cap.release()


def main():
   while True:
        cam1 = Camera().get_frame()
        frame = cv2.resize(cam1, (0, 0), fx = 0.75, fy = 0.75)
        cv2.imshow("Frame", frame)

        if cv2.waitKey(1) & 0xFF == ord('q'):
            break

    Camera().release_camera()
    return ()

if __name__ == '__main__':
    main()
    cv2.destroyAllWindows()

关于python - 如何使用面向对象的 OpenCV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50784148/

相关文章:

python - 在Python中查找偶数斐波那契数之和的代码的内存错误

python - 使用 re 模块 sub() 创建匹配字符串或空字符串的匹配组?

opencv - ANN-人工神经网络训练

python - python opencv中背景减法的高斯混合模型实现

python - 如何检查 Python 类中的请求方法?

python - 为什么这个随机生成器有时会返回 3 位而不是 4 位?

python - 用Python计算IRR

c++ - 如何使用 OpenCV 从表中检测行和列

c++ - 在 Windows 7 上运行应用程序时未加载 OpenCV ffmpeg DLL,适用于 8 和 10

python - 如何将 cv2 从 python 3.7 更改为 3.6