临时保存图像 pygame

Temporary save Image in pygame

我正在使用 pygame 作为界面并使用 opencv 进行图像处理来制作图像裁剪器。 我创建了像 crop()、colorfilter() 等函数,但我将图像加载为 pygame.image.load() 以在屏幕上显示它,但是当我执行 crop() 时它是 numpy.ndarray 和 pygame无法加载它出现错误:

argument 1 must be pygame.Surface, not numpy.ndarray

我该如何解决这个问题。我需要 blit() 裁剪后的图像。应该保存图像并读取它,然后在完成后将其删除,因为我想应用多个滤镜。

以下函数将OpenCV(cv2)图像分别转换为numpy.array (that's the same) to a pygame.Surface

import numpy as np
def cv2ImageToSurface(cv2Image):
    if cv2Image.dtype.name == 'uint16':
        cv2Image = (cv2Image / 256).astype('uint8')
    size = cv2Image.shape[1::-1]
    if len(cv2Image.shape) == 2:
        cv2Image = np.repeat(cv2Image.reshape(size[1], size[0], 1), 3, axis = 2)
        format = 'RGB'
    else:
        format = 'RGBA' if cv2Image.shape[2] == 4 else 'RGB'
        cv2Image[:, :, [0, 2]] = cv2Image[:, :, [2, 0]]
    surface = pygame.image.frombuffer(cv2Image.flatten(), size, format)
    return surface.convert_alpha() if format == 'RGBA' else surface.convert()

有关函数​​的详细说明,请参阅