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类来将图像帧保存到视频文件中。