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

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

最佳答案

以下函数将OpenCV(cv2)图像分别从 numpy.array (相同)转换为 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()
有关该功能的详细说明,请参见How do I convert an OpenCV (cv2) image (BGR and BGRA) to a pygame.Surface object

10-06 11:16