[英]Temporary save Image in pygame
我正在制作一個使用 pygame 作為界面和 opencv 進行圖像處理的圖像裁剪器。 我創建了像crop()、colorfilter()等函數,但我將圖像加載為pygame.image.load()以在屏幕上顯示它但是當我執行crop()時它是numpy.ndarray並且pygame無法加載它得到錯誤:
參數 1 必須是 pygame.Surface,而不是 numpy.ndarray
我該如何解決這個問題。 我需要 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()
有關該函數的詳細說明,請參閱如何將 OpenCV (cv2) 圖像(BGR 和 BGRA)轉換為 pygame.Surface 對象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.