我正在试着修复我的网络摄像头,它里面有一条水平的绿线,我使用OpenCV来嵌入这条线,使用pyVirtualcam来创建一个虚拟摄像头,并在Discorde和Google Meet等应用程序中使用它. 使用OpenCV的图像处理工作正常,但在try 创建虚拟凸轮时出现以下错误:

Traceback (most recent call last):
  File "...\webcamfix\camfix.py", line 37, in <module>     
    cam.send(frame)
  File "...\pyvirtualcam\camera.py", line 349, in send
    self._backend.send(frame)
    ^^^^^^^^^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'send'

以下是我的代码:

import cv2
import pyvirtualcam
from pyvirtualcam import PixelFormat

# Read webcam
webcam = cv2.VideoCapture(0)

# Set width to 1280 and height to 720
webcam.set(3, 1280)
webcam.set(4, 720)

# Read mask
mask = cv2.imread('mask.jpg', cv2.IMREAD_GRAYSCALE)

# Start virtual cam with 1280x720 30fps
with pyvirtualcam.Camera(1280, 720, 30, fmt=PixelFormat.BGR) as cam:
    print('Virtual camera device: ' + cam.device)


if webcam.isOpened():
    sucess, frame = webcam.read()
    while sucess:
        sucess, frame = webcam.read()

        # Inpainting frame where mask limits using TELEA technique
        frame = cv2.inpaint(frame, mask, 3, cv2.INPAINT_NS)
        
        # Fliping image
        frame = cv2.flip(frame, 1)

        # Displaying video and closing the window if ESC is pressed
        cv2.imshow("webcamfix", frame)
        key = cv2.waitKey(5)
        if key == 27: # ESC
            break

        cam.send(frame)
        cam.sleep_until_next_frame()

正如pyVirtualcam文档建议的那样,我使用的是OBS虚拟摄像头和Unity Video Capture.如果有什么更简单的方法可以在Windows上用python创建一个虚拟相机,我会很高兴知道的.

推荐答案

使用with...as cam语句时,cam对象在嵌套代码块之后自动关闭.

cam对象应用与opening a file using with statement相同的行为(文件在嵌套代码块之后自动关闭).

由于cam对象已关闭,因此我们将收到异常"'NoneType' object has no attribute 'send'".


with pyvirtualcam.Camera(1280, 720, 30, fmt=PixelFormat.BGR) as cam:替换为:

cam = pyvirtualcam.Camera(1280, 720, 30, fmt=PixelFormat.BGR)

或者,将代码放在嵌套块内的with pyvirtualcam.Camera(1280, 720, 30, fmt=PixelFormat.BGR) as cam之后:

with pyvirtualcam.Camera(1280, 720, 30, fmt=PixelFormat.BGR) as cam:
    print('Virtual camera device: ' + cam.device)

    if webcam.isOpened():
        success = True
        while success:
            success, frame = webcam.read()
            
            # Displaying video and closing the window if ESC is pressed
            if success:
                # Inpainting frame where mask limits using TELEA technique
                frame = cv2.inpaint(frame, mask, 3, cv2.INPAINT_NS)
            
                # Flipping image
                frame = cv2.flip(frame, 1)
                
                cv2.imshow("webcamfix", frame)
                key = cv2.waitKey(1)
                if key == 27: # ESC
                    break

                cam.send(frame)
                cam.sleep_until_next_frame()

Python相关问答推荐

django禁止直接分配到多对多集合的前端.使用user.set()

OR—Tools中CP—SAT求解器的IntVar设置值

如何将多进程池声明为变量并将其导入到另一个Python文件

在np数组上实现无重叠的二维滑动窗口

调用decorator返回原始函数的输出

Django—cte给出:QuerySet对象没有属性with_cte''''

如何在TensorFlow中分类多个类

Gekko中基于时间的间隔约束

在Python中从嵌套的for循环中获取插值

从一个df列提取单词,分配给另一个列

在Python中控制列表中的数据步长

如何在Python中将超链接添加到PDF中每个页面的顶部?

Polars定制函数返回多列

运行从Airflow包导入的python文件,需要airflow实例?

是否从Python调用SHGetKnownFolderPath?

如何更改网络中某条边的位置(&Q;)?

将.exe文件从.py转换后出现问题.";ModuleNotFoundError:没有名为';Selify;的模块

如何从NumPy数组中提取主频?

通过外键Django创建从一个字段到其他字段的 Select 列表

意外的麻木图像reshape 为网格问题