Получить изображение из безголового экземпляра Pygame - PullRequest
1 голос
/ 09 марта 2020

Я работаю с игрой на основе Pygame. В резюме - мне нужно запустить его в режиме без головы. Сейчас я использую:

os.environ['SDL_VIDEODRIVER'] = 'dummy'

И проблема в том, что я не могу перенести экран из игры в массив NumPy. Единственное решение , которое я нашел, на самом деле работает, но только с сохранением изображения в файл, что совершенно не соответствует действительности - но, возможно, это подсказка. Я пробовал что-то вроде разбора поверхности на строку:

pil_string_image = pygame.image.tostring(screen,"RGBA",False)
im = Image.frombytes("RGBA",(400, 400), pil_string_image)       
cv2.imshow('screen', np.asarray(im))

но в итоге у меня только серый экран и все.

Причина в том, что мне нужно подготовить игру работать в Collab или в текстовой среде, потому что я делаю вещи ML, используя игровой экран.

Есть ли способ правильно сделать экран? Или, может быть, я мог бы запустить безголовый режим другим способом, который позволяет мне делать снимки просто так?

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

Ответы [ 2 ]

1 голос
/ 10 марта 2020

Кажется, screen является pygame.surface объектом, предположительно возвращенным из pygame.display.set_mode(..). Вы можете вызывать surfarray методы, используя screen в качестве первого аргумента.

Например,

>>> import os
>>> import pygame
pygame 1.9.6
Hello from the pygame community. https://www.pygame.org/contribute.html
>>> WIDTH, HEIGHT = 640, 480
>>> os.environ["SDL_VIDEODRIVER"] = "dummy"
>>> pygame.init()
(6, 0)
>>> screen = pygame.display.set_mode((WIDTH, HEIGHT))
>>> screen.fill(pygame.color.Color("black"))
<rect(0, 0, 640, 480)>
>>> print(pygame.surfarray.array3d(screen)[0])
[[0 0 0]
 [0 0 0]
 [0 0 0]
 ...
 [0 0 0]
 [0 0 0]
 [0 0 0]]
>>> pygame.draw.line(screen, pygame.color.Color("blueviolet"), (0,0), (0,480))
<rect(0, 0, 1, 481)>
>>> print(pygame.surfarray.array3d(screen)[0])
[[146  36 255]
 [146  36 255]
 [146  36 255]
 ...
 [146  36 255]
 [146  36 255]
 [146  36 255]]
0 голосов
/ 11 марта 2020

Я действительно тупой ... Помните, дети, когда вы пытаетесь диагностировать, правильно ли изображение читалось с помощью OpenCV, иногда

    cv2.waitKey(1)

будет вашим лучшим другом.

Спасибо за: Команда cv2.imshow не работает должным образом в opencv- python

Нет ответа из окна cv2, меня беспокоило, работает ли отображение корректно ...

...