临时保存图像 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()
有关函数的详细说明,请参阅 。
我正在使用 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()
有关函数的详细说明,请参阅