如何将pygame中的3d数组转换为opencv python中的vaid输入?
我试图从游戏文件养活我的屏幕输入图像处理器文件: - pygame的输出:如何将pygame中的3d数组转换为opencv python中的vaid输入?
image_data = pygame.surfarray.array3d(pygame.display.get_surface())
OpenCV的输入:
imgTesting = cv2.imread(image_data)
和错误我得到的是:
imgTesting = cv2.imread(image_data) TypeError: bad argument type for built-in operation
那么如何将这个3d输入转换为opencv友好数据,以便我可以进行图像处理?
回答:
imread()
用于从文件读取,而不是从存储器读取。
但你不必转换它。 PyGame
给出了您可以在cv2
中使用的图像。
你必须只:从RGB
- 转换(在
PyGame
使用)BGR
(在CV2
使用)。 transpose
图片 - 交换width
与height
。PyGame
使用(X,Y)
但是CV2
使用(Y,X)
像数学中的矩阵(换句话说(row, column)
)。
我觉得这个代码显示了你可能需要的所有东西。
- 创建
PyGame
- 显示图像中
PyGame
- 转换图像的图像从
PyGame
到CV2
- 显示图像中
CV2
- 在
CV2
修改 - 显示修改后的图像的图像
- convert modif从
CV2
到PyGame
- 显示IED图像修改的图像中
PyGame
CV2
。
import pygame import cv2
pygame.init()
# --- create PyGame image ---
pg_img = pygame.Surface((400, 200))
pygame.draw.circle(pg_img, (255,0,0), (0,0), 200)
# --- display PyGame image ---
screen = pygame.display.set_mode((400, 400))
screen.fill((255,255,255))
screen.blit(pg_img, pg_img.get_rect())
pygame.display.flip()
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
if event.type == pygame.KEYDOWN:
running = False
pygame.quit()
# --- move from PyGame to CV2 ---
color_image = pygame.surfarray.array3d(pg_img)
color_image = cv2.transpose(color_image)
color_image = cv2.cvtColor(color_image, cv2.COLOR_RGB2BGR)
# --- display CV2 image ---
cv2.imshow('Color', color_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
# --- change CV2 image ---
color_image = cv2.rotate(color_image, cv2.ROTATE_90_CLOCKWISE)
gray_image = cv2.cvtColor(color_image, cv2.COLOR_BGR2GRAY)
# --- display CV2 image ---
cv2.imshow('Gray', gray_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
# --- save in file in CV2 ---
cv2.imwrite('test.png', color_image)
# --- move back from CV2 to PyGame ---
gray_image = cv2.cvtColor(gray_image, cv2.COLOR_GRAY2RGB)
gray_image = cv2.transpose(gray_image)
pg_img = pygame.surfarray.make_surface(gray_image)
# --- display PyGame image ---
screen = pygame.display.set_mode((400, 400))
screen.fill((255,255,255))
screen.blit(pg_img, pg_img.get_rect())
pygame.display.flip()
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
if event.type == pygame.KEYDOWN:
running = False
pygame.quit()
以上是 如何将pygame中的3d数组转换为opencv python中的vaid输入? 的全部内容, 来源链接: utcz.com/qa/259118.html