簡體   English   中英

在pygame中臨時保存圖像

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM