详解Pygame 使用相机模块

  • Post category:Python

Pygame库中的相机模块(pygame.camera)允许用户通过连接相机设备来捕捉图像和视频。该模块可以方便地收集视频录制和流媒体。下面是Pygame相机模块的使用说明。

安装相机模块

使用Pygame的相机模块需要先安装。可以使用pip命令安装:

pip install pygame

初始化相机

在使用相机之前,需要初始化相机。使用如下代码来初始化相机:

import pygame
import pygame.camera

pygame.camera.init()

获取相机列表

使用相机之前,需要获取相机列表。可以使用如下代码获取相机列表:

camlist = pygame.camera.list_cameras()
if camlist:
    cam = pygame.camera.Camera(camlist[0], (320, 240), "RGB")

该代码只是演示如何获取相机列表,这里列出参数的意义:

  • camlist[0]: 列表索引0对应的相机
  • (320, 240): 用于捕捉的图像大小
  • “RGB”: 图像格式为RGB

捕捉相机图像

获取相机列表之后,可以使用如下代码来捕捉相机图像:

cam.start()
image = cam.get_image()
cam.stop()

注意,在使用相机之前,需要先启动相机使用cam.start()函数,之后获取图像,最后使用cam.stop()停止相机。在获取图像时,使用cam.get_image()获取图像。

示例1:显示相机图像

下面是一个示例代码,该代码会显示相机捕捉到的图像:

import pygame
import pygame.camera

pygame.camera.init()

camlist = pygame.camera.list_cameras()

if camlist:
    cam = pygame.camera.Camera(camlist[0], (320, 240), "RGB")
    cam.start()
    while True:
        image = cam.get_image()
        screen = pygame.display.set_mode((320, 240))
        screen.blit(image, (0, 0))
        pygame.display.flip()
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                cam.stop()
                exit()

该代码会在窗口中显示相机捕捉到的图像,并且在程序退出时,使用cam.stop()来停止相机。

示例2:使用Pygame录制视频

下面是一个示例代码,该代码将使用连接的相机来录制视频:

import pygame
import pygame.camera

pygame.camera.init()

camlist = pygame.camera.list_cameras()

if camlist:
    cam = pygame.camera.Camera(camlist[0], (320, 240), "RGB")
    cam.start()
    size = (320, 240)
    pygame.init()
    screen = pygame.display.set_mode(size)
    pygame.display.set_caption("Pygame video")
    pygame.mouse.set_visible(True)
    clock = pygame.time.Clock()
    video_file = "test.avi"

    # 初始化视频编码器
    fps = 30
    fourcc = cv2.VideoWriter_fourcc(*'DIVX')
    writer = cv2.VideoWriter(video_file, fourcc, fps, size)

    # 进入视频录制循环
    while True:
        # 获取相机图像并绘制到屏幕上
        image = cam.get_image()
        screen.blit(image, (0, 0))
        pygame.display.update()
        # 保存图像到视频文件
        image = pygame.surfarray.array3d(pygame.display.get_surface())
        image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
        writer.write(image)
        clock.tick(fps)
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                writer.release()
                cam.stop()
                pygame.quit()
                sys.exit()

在该代码中,会将相机捕获的图像保存到test.avi视频文件中,并在程序退出时停止相机。在录制视频过程中,使用pygame.surfarray.array3d()来获取屏幕图像并将其转换为OpenCV库可处理的格式。最后通过OpenCV的VideoWriter类来将图像帧保存到视频文件中。