PyGame教程:Python绘制蓝圈保存为图片

版权申诉
0 下载量 165 浏览量 更新于2024-08-23 收藏 9KB DOCX 举报
"本文档详细介绍了如何在Python中使用PyGame库进行图像绘制,并将其保存为图片文件。PyGame是一个流行的Python游戏开发库,它不仅支持图形处理,还能够创建交互式应用程序。在这个例子中,作者通过`pg_draw_circle_save101.py`脚本,展示了如何在一个白色背景上绘制一个蓝色实心圆,并将这个图像保存为PNG格式的图片文件。 首先,导入必要的模块`pygame`,然后设置窗口大小(300x300像素)和背景颜色(白色)。接下来,创建一个新的显示窗口并通过`pg.display.set_caption()`函数添加窗口标题。在PyGame中,圆是通过`pg.draw.circle()`函数绘制的,该函数接受四个参数:窗口对象、颜色、圆心坐标和半径。在这个示例中,圆心设在窗口中心,半径取圆心坐标的较小值,圆的颜色设定为蓝色,线条宽度默认为0,即填充整个圆。 保存图像时,使用`pg.image.save()`函数,可以指定文件名(如`circle_blue.png`),将当前窗口的内容保存到磁盘。完成绘制后,调用`pg.display.flip()`来更新显示窗口,确保新绘制的图像可见。 文档强调了这个脚本是在Python 2.7版本和PyGame 1.9.2版本下测试过的,所以读者在尝试时需要注意兼容性。这篇文档提供了一个实用的教程,帮助初学者理解如何在PyGame环境中进行基本的图像绘制和保存操作,这对于学习游戏开发或者图形应用的开发者来说是非常有价值的参考资料。"

修改此代码使其可重复运行import pygame import sys from pygame.locals import * from robomaster import * import cv2 import numpy as np focal_length = 750 # 焦距 known_radius = 2 # 已知球的半径 def calculate_distance(focal_length, known_radius, perceived_radius): distance = (known_radius * focal_length) / perceived_radius return distance def show_video(ep_robot, screen): 获取机器人第一视角图像帧 img = ep_robot.camera.read_cv2_image(strategy="newest") 转换图像格式,转换为pygame的surface对象 img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) img = cv2.transpose(img) # 行列互换 img = pygame.surfarray.make_surface(img) screen.blit(img, (0, 0)) # 绘制图像 def detect_white_circle(ep_robot): 获取机器人第一视角图像帧 img = ep_robot.camera.read_cv2_image(strategy="newest") 转换为灰度图像 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 进行中值滤波处理 gray = cv2.medianBlur(gray, 5) 检测圆形轮廓 circles = cv2.HoughCircles(gray, cv2.HOUGH_GRADIENT, 1, 50, param1=160, param2=40, minRadius=5, maxRadius=60) if circles is not None: circles = np.uint16(np.around(circles)) for circle in circles[0, :]: center = (circle[0], circle[1]) known_radius = circle 在图像上绘制圆形轮廓 cv2.circle(img, center, known_radius, (0, 255, 0), 2) 显示图像 distance = calculate_distance(focal_length, known_radius, known_radius) 在图像上绘制圆和距离 cv2.circle(img, center, known_radius, (0, 255, 0), 2) cv2.putText(img, f"Distance: {distance:.2f} cm", (center[0] - known_radius, center[1] - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2) cv2.imshow("White Circle Detection", img) cv2.waitKey(1) def main(): pygame.init() screen_size = width, height = 1280, 720 screen = pygame.display.set_mode(screen_size) ep_robot = robot.Robot() ep_robot.initialize(conn_type='ap') version = ep_robot.get_version() print("Robot version: {0}".format(version)) ep_robot.camera.start_video_stream(display=False) pygame.time.wait(100) clock = pygame.time.Clock() while True: clock.tick(5) # 将帧数设置为25帧 for event in pygame.event.get(): if event.type == QUIT: ep_robot.close() pygame.quit() sys.exit() show_video(ep_robot, screen) detect_white_circle(ep_robot) if name == 'main': main()

160 浏览量