You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows下用Python-PyGame实现摄像头画面叠加制服的代码问题求助

解决摄像头调用与制服图片叠加位置问题

我帮你梳理下代码里的两个核心问题,一步步来修复:

问题1:无法调用摄像头

你的代码直接写死了摄像头路径/dev/video0,这只适配Linux系统,还可能遇到权限不足、设备编号不匹配的情况。解决思路如下:

  • 先用pygame.camera.list_cameras()获取系统可用摄像头列表,避免硬编码路径
  • Linux系统如果提示权限错误,执行sudo usermod -aG video $USER,把当前用户加入video组后重新登录
  • Windows/macOS环境下,确保摄像头没被其他程序占用,pygame摄像头模块依赖的驱动正常

问题2:制服图片未显示在窗口底部

原代码存在三个关键问题:没有把制服图绘制到屏幕、缩放尺寸超出窗口、未设置底部对齐位置。修正要点:

  • 按屏幕宽度等比例缩放制服图,避免拉伸变形
  • 设置图片矩形的bottom属性对齐窗口底部,固定在画面下方
  • 先绘制摄像头画面,再叠加制服图,避免被摄像头画面覆盖

修正后的完整代码

import pygame
import sys
from pygame.locals import *

pygame.init()
pygame.camera.init()

# 自动获取可用摄像头,避免硬编码路径
available_cameras = pygame.camera.list_cameras()
if not available_cameras:
    print("未检测到可用摄像头!")
    sys.exit()

# 初始化窗口与摄像头
screen_size = (640, 480)
screen = pygame.display.set_mode(screen_size)
pygame.display.set_caption("制服抓拍系统")

cam = pygame.camera.Camera(available_cameras[0], screen_size)
try:
    cam.start()
except Exception as e:
    print(f"摄像头启动失败:{e},请检查设备占用或权限")
    sys.exit()

# 加载并处理制服图片
try:
    uniform_img = pygame.image.load('College Boy Medium.png').convert_alpha()
except:
    print("无法加载制服图片,请检查文件路径是否正确")
    sys.exit()

# 按屏幕宽度等比例缩放,保持图片比例
target_width = screen_size[0]
scale_ratio = target_width / uniform_img.get_width()
target_height = int(uniform_img.get_height() * scale_ratio)
uniform_img = pygame.transform.scale(uniform_img, (target_width, target_height))
uniform_rect = uniform_img.get_rect()
# 固定图片在窗口底部
uniform_rect.bottom = screen_size[1]

# 主循环
running = True
while running:
    # 绘制摄像头实时画面
    cam_frame = cam.get_image()
    screen.blit(cam_frame, (0, 0))
    
    # 叠加制服图片到窗口底部
    screen.blit(uniform_img, uniform_rect)
    
    pygame.display.update()
    
    # 事件处理
    for event in pygame.event.get():
        if event.type == QUIT:
            running = False
        # 空格键触发抓拍,可扩展上传数据库逻辑
        elif event.type == KEYDOWN:
            if event.key == K_SPACE:
                capture_name = f"capture_{pygame.time.get_ticks()}.png"
                pygame.image.save(screen, capture_name)
                print(f"抓拍完成,图片已保存为{capture_name}")
                # 这里可以添加上传数据库的代码,比如调用API或数据库驱动

# 清理资源
cam.stop()
pygame.quit()
sys.exit()

额外提示

  • 抓拍功能我加了空格键触发,后续可以把保存的图片通过数据库SDK或接口上传到数据库
  • 如果制服位置需要微调,可修改uniform_rect.bottom的数值(比如减10像素,让图片更贴合底部)
  • 确保College Boy Medium.png和代码在同一目录,或者使用完整文件路径

内容的提问来源于stack exchange,提问作者Joshua Ilanga

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 09:28:09