在Google Colab中用Pygame与OpenCV给视频加文字无显示问题求助
解决Google Colab中Pygame+OpenCV给视频加文字不显示的问题
你的代码核心问题是操作逻辑顺序错误,加上格式不匹配,导致文字根本没被合并到输出帧中,以下是具体问题分析和修正方案:
问题根源
- 操作顺序颠倒:你先把文字画到Pygame的
screen表面,但随后又用原始OpenCV帧创建了新的pygame_frame,最终导出的是这个不带文字的原始帧,文字完全没被纳入处理流程。 - 颜色通道不匹配:OpenCV读取的帧是BGR格式,而Pygame使用RGB格式,直接转换会导致颜色错乱,也可能间接影响文字显示。
- 无效的窗口操作:Colab是无图形界面环境,
pygame.display.set_mode()和pygame.display.flip()属于无效操作,没必要依赖Pygame窗口处理帧。 - 重复初始化资源:每次循环都创建字体对象,既浪费资源也无必要。
修正后的代码
import pygame import cv2 import os from google.colab.patches import cv2_imshow # 读取视频 cap = cv2.VideoCapture(os.path.join('sample_data', 'BACKGROUND.mp4')) # 获取视频参数 width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) # 自动获取原视频FPS,避免手动设置偏差 fps = cap.get(cv2.CAP_PROP_FPS) if cap.get(cv2.CAP_PROP_FPS) > 0 else 30 frames_count = int(cap.get(cv2.CAP_PROP_FRAME_COUNT)) # 初始化视频写入器 fourcc = cv2.VideoWriter_fourcc(*'mp4v') out = cv2.VideoWriter('/content/drive/MyDrive/teste.mp4', fourcc, fps, (width, height)) # 提前初始化Pygame字体和文字(仅执行一次) pygame.init() font = pygame.font.SysFont('Arial', 50) # 预渲染文字表面,提升循环效率 text_surface = font.render("This is a test", True, (255, 255, 255)) text_pos = (94, 479) def edit(): while cap.isOpened(): ret, frame = cap.read() if not ret: break # 1. 将OpenCV的BGR帧转换为Pygame兼容的RGB格式 frame_rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) pygame_frame = pygame.surfarray.make_surface(frame_rgb.swapaxes(0, 1)) # 2. 在当前帧上绘制文字 pygame_frame.blit(text_surface, text_pos) # 3. 将带文字的Pygame帧转换回OpenCV的BGR格式 frame_with_text = pygame.surfarray.array3d(pygame_frame).swapaxes(0, 1) frame_with_text = cv2.cvtColor(frame_with_text, cv2.COLOR_RGB2BGR) # 写入输出视频 out.write(frame_with_text) # 预览帧 cv2_imshow(frame_with_text) if cv2.waitKey(1) & 0xFF == ord('q'): break # 释放资源 cap.release() out.release() cv2.destroyAllWindows() edit()
关键修改说明
- 调整处理流程:先把原始帧转换成Pygame格式,再在该帧上绘制文字,最后转换回OpenCV格式,确保文字被包含在输出帧中。
- 颜色格式转换:添加
BGR↔RGB的格式转换,匹配两个库的颜色通道要求。 - 移除无效操作:删除Colab中无用的Pygame窗口创建和刷新代码。
- 优化资源初始化:把字体和文字渲染移到循环外,避免重复创建资源,提升处理速度。
内容的提问来源于stack exchange,提问作者Máyra
相关产品推荐
相关产品推荐

