Search code examples
pythonopencvcamera

Webcam input sent to pyvirtualcam is blue(using pyvirtualcam and opencv)


I am trying to get input from my webcam using OpenCv and send it to a virtual camera using pyvirtualcam. For some reason when my webcam is displayed it gives it a blue filter. When i display my webcam without sending it to virtual camera there is no filter and everything works well.

import pyvirtualcam
import cv2

cap = cv2.VideoCapture(0)
with pyvirtualcam.Camera(width=1280, height=720, fps=20) as cam:
    while True:
        ret_val, frame = cap.read()

        frame = cv2.resize(frame, (1280, 720), interpolation=cv2.BORDER_DEFAULT)
        # cv2.imshow('my webcam', frame)
        cam.send(frame)
        cam.sleep_until_next_frame()
        if cv2.waitKey(1) == 27:
            break  # esc to quit
    cv2.destroyAllWindows()

Solution

  • OpenCV uses BGR as pixel format. pyvirtualcam expects RGB by default, but it supports BGR as well:

    fmt = pyvirtualcam.PixelFormat.BGR
    with pyvirtualcam.Camera(width=1280, height=720, fps=20, fmt=fmt) as cam: