4

Python 3.4、pygame==1.9.2b8

グレースケールのフレームを描きたいです。さて、以下のコードは青色を生成しますが、0 - 黒の範囲 (0,255) の色を作成したいと考えています。255 -白。それはどのように可能ですか?

import pygame 
import numpy as np
s = 300
screen = pygame.display.set_mode((s, s))
screenarray = np.zeros((s,s))
screenarray.fill(200)
pygame.surfarray.blit_array(screen, screenarray)
pygame.display.flip()
input()
  • screenarray実際には、各要素が (0,65535) の間にある、より複雑ながあります。だから私はそれをグレースケールに変換したい。

どうもありがとう。

4

4 に答える 4

1

PyGame は 24 ビット カラーを 3 バイト (R、G、B) として使用するため、白は (0,0,0)、黒は (255,255,255) です。

import pygame 
import numpy as np

SIZE = 256

pygame.init()
screen = pygame.display.set_mode((SIZE, SIZE))

screenarray = np.zeros((SIZE, SIZE, 3))

for x in range(SIZE):
    screenarray[x].fill(x)

pygame.surfarray.blit_array(screen, screenarray)

pygame.display.flip()

input()

pygame.quit()

ここに画像の説明を入力

于 2016-11-23T07:07:19.187 に答える
0

グレースケール イメージの場合、配列の形状を次のように変更する必要がありnumpy.reshape、次のようにグレー チャネルを赤緑および青のカラー チャネルに拡張する必要がありますnumpy.repeat

cv2Image = np.repeat(cv2Image.reshape(size[1], size[0], 1), 3, axis = 2)

オブジェクトは次のpygame.Surface方法で生成できますpygame.image.frombuffer

surface = pygame.image.frombuffer(cv2Image.flatten(), size, 'RGB')

numpy.array次の関数は、形状 ( yx ) を持つ a をpygame.Surfaceオブジェクトに変換します。

import numpy as np
def numpyGrayscaleToSurface(numpyArray):
    size = numpyArray.shape[1::-1]
    numpyArray= np.repeat(numpyArray.reshape(size[1], size[0], 1), 3, axis = 2)
    surface = pygame.image.frombuffer(numpyArray.flatten(), size, 'RGB')
    return surface.convert()

OpenCV (cv2) イメージ (BGR および BGRA) を pygame.Surface オブジェクトに変換する方法も参照してください。

于 2020-10-18T09:14:27.760 に答える