如何将pygame中的3d数组转换为opencvpython中的vaid输入?

2024-06-17 12:01:59 发布

您现在位置:Python中文网/ 问答频道 /正文

在 我正在尝试将我的屏幕输入从游戏文件输入到图像处理器文件:- PyGame输出:

image_data = pygame.surfarray.array3d(pygame.display.get_surface()) 

OpenCV输入:

^{pr2}$

我得到的错误是:

imgTesting = cv2.imread(image_data)         
TypeError: bad argument type for built-in operation

那么,如何将这个3d输入转换成opencv友好的数据以便进行图像处理呢?在


Tags: 文件图像image游戏dataget屏幕display
1条回答
网友
1楼 · 发布于 2024-06-17 12:01:59

imread()用于从文件读取,而不是从内存读取。在

但你不必转换它。PyGame提供可在cv2中使用的图像。在

您只需:

  • RGB(用于PyGame)转换为{}(用于CV2)。在
  • transpose图像-与height交换widthPyGame在数学中使用(X,Y),但是CV2在数学中使用(Y,X)类矩阵(换句话说(row, column))。在

我可能需要这些代码。在

  • PyGame中创建图像
  • PyGame中显示图像
  • 将图像从PyGame转换为CV2
  • CV2中显示图像
  • CV2中修改图像
  • CV2中显示修改后的图像
  • 将修改后的图像从CV2转换为PyGame
  • 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()

相关问题 更多 >