如何将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图片 - 交换widthheightPyGame使用(X,Y)但是CV2使用(Y,X)像数学中的矩阵(换句话说(row, column))。


我觉得这个代码显示了你可能需要的所有东西。

  • 创建PyGame
  • 显示图像中PyGame
  • 转换图像的图像从PyGameCV2
  • 显示图像中CV2
  • CV2
  • 修改

    CV2

  • 显示修改后的图像的图像
  • convert modif从CV2PyGame
  • 显示IED图像修改的图像中PyGame

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

回到顶部