Wenn Sie OpenCV in Python ausführen und die Ergebnisse der Analyse und Verarbeitung anzeigen möchten, ist es am einfachsten, die Methode cv2.imshow ()
zu verwenden.
Wenn Sie jedoch mehr als nur anzeigen möchten, reicht das OpenCV-Fenster nicht aus.
Eine Möglichkeit, dieses Problem zu lösen, ist die Verwendung von Pygame, dem Python-GUI-Framework [^ Pygame Reasons to Choose].
In diesem Beitrag werde ich darüber schreiben, wie OpenCV-Bilder in Bilder für Pygame konvertiert werden.
[Grund für die Wahl von ^ Pygame]: Der Grund für Pygame ist, dass es auch mit Raspbian Lite gezeichnet werden kann (super wichtig). Die meisten GUI-Frameworks (einschließlich der OpenCV-Fensterfunktionalität) basieren auf dem X Window System und können auf Raspbian Lite ohne integrierte GUI nicht angezeigt werden. Pygame kann jedoch auch mit SDL zeichnen, sodass es auch mit Raspbian Lite funktioniert.
#Melden Sie sich nach dem Schreiben des Betriebssystems mit ssh an
#Paketliste aktualisieren
sudo apt update
#Installieren Sie OpenCV für Python3
sudo apt install python3-opencv
#Installieren Sie Pygame für Python 3
sudo apt install python3-pygame
#Überprüfen Sie die Python-Version
python3 --version
#Überprüfen Sie die Version von OpenCV
python3 -c 'import cv2; print(cv2.__version__)'
#Überprüfen Sie die Version von Pygame
python3 -c 'import pygame; print(pygame.version.ver)'
Laut "Zeichne ein mit opencv erstelltes Bild mit Pygame. --BlankTar" ist es wie folgt. Es scheint, dass es durch die Methode konvertiert werden kann.
opencv_image = opencv_image[:,:,::-1] #Da OpenCV BGR und Pygame RGB ist, muss es konvertiert werden.
shape = opencv_image.shape[1::-1] #OpenCV(Höhe,Breite,Anzahl der Farben), Pygame(Breite, Höhe)Das wird also auch konvertiert.
pygame_image = pygame.image.frombuffer(opencv_image.tostring(), shape, 'RGB')
Schreiben wir den Code, um ihn auf diese Weise zu konvertieren.
show-image.py
import time
import cv2
import pygame
def get_opencv_img_res(opencv_image):
height, width = opencv_image.shape[:2]
return width, height
def convert_opencv_img_to_pygame(opencv_image):
"""
Konvertieren Sie OpenCV-Bilder für Pygame.
see https://blanktar.jp/blog/2016/01/pygame-draw-opencv-image.html
"""
opencv_image = opencv_image[:,:,::-1] #Da OpenCV BGR und Pygame RGB ist, muss es konvertiert werden.
shape = opencv_image.shape[1::-1] #OpenCV(Höhe,Breite,Anzahl der Farben), Pygame(Breite, Höhe)Das wird also auch konvertiert.
pygame_image = pygame.image.frombuffer(opencv_image.tostring(), shape, 'RGB')
return pygame_image
def main():
#Laden Sie Bilder mit OpenCV
image_path = '/usr/share/info/gnupg-module-overview.png' #Der Pfad der Bilddatei, die ursprünglich in Raspbian Buster Lite enthalten war
opencv_image = cv2.imread(image_path)
#Pygame initialisieren
pygame.init()
width, height = get_opencv_img_res(opencv_image)
screen = pygame.display.set_mode((width, height))
#Konvertieren Sie OpenCV-Bilder für Pygame
pygame_image = convert_opencv_img_to_pygame(opencv_image)
#Zeichne ein Bild
screen.blit(pygame_image, (0, 0))
pygame.display.update() #Bildschirm aktualisieren
#Warten Sie 5 Sekunden, bis Sie fertig sind
time.sleep(5)
pygame.quit()
if __name__ == '__main__':
main()
Befehl starten
sudo python3 show-image.py
# Note:Sie müssen "sudo" hinzufügen und mit Root-Rechten ausführen, um es mithilfe der SDL-Bibliothek anzuzeigen.
#"Mit Desktop" -Version von Raspbian, die nicht Lite ist, und "ssh-Befehl"-Wenn Sie beispielsweise eine Verbindung mit der hinzugefügten Option "X" herstellen,
#Es ist kein "sudo" -Befehl erforderlich, da er mit dem X Window System angezeigt werden kann.
# see https://www.subthread.co.jp/blog/20181206/
Wenn Sie es starten, wird das Bild 5 Sekunden lang angezeigt und es wird automatisch beendet. Die Konvertierung funktioniert korrekt.
Betrachten wir nun den Fall, dass das analysierte Video mit der oben beschriebenen Methode in Echtzeit angezeigt wird. Solche Anwendungen werden häufig verwendet, beispielsweise beim Analysieren und Anzeigen von Bildern, die von einer Kamera gelesen wurden. In diesem Fall ist die Konvertierungsgeschwindigkeit wichtig. Lassen Sie uns messen.
show-image.py
import time
import cv2
import pygame
def get_opencv_img_res(opencv_image):
height, width = opencv_image.shape[:2]
return width, height
def convert_opencv_img_to_pygame(opencv_image):
"""
Konvertieren Sie OpenCV-Bilder für Pygame.
see https://blanktar.jp/blog/2016/01/pygame-draw-opencv-image.html
"""
opencv_image = opencv_image[:,:,::-1] #Da OpenCV BGR und Pygame RGB ist, muss es konvertiert werden.
shape = opencv_image.shape[1::-1] #OpenCV(Höhe,Breite,Anzahl der Farben), Pygame(Breite, Höhe)Das wird also auch konvertiert.
pygame_image = pygame.image.frombuffer(opencv_image.tostring(), shape, 'RGB')
return pygame_image
def main():
#Laden Sie Bilder mit OpenCV
image_path = '/usr/share/info/gnupg-module-overview.png' #Der Pfad der Bilddatei, die ursprünglich in Raspbian Buster Lite enthalten war
opencv_image = cv2.imread(image_path)
#Pygame initialisieren
pygame.init()
width, height = get_opencv_img_res(opencv_image)
screen = pygame.display.set_mode((width, height))
#Konvertieren Sie OpenCV-Bilder für Pygame
time_start = time.perf_counter() #Messung starten
pygame_image = convert_opencv_img_to_pygame(opencv_image)
time_end = time.perf_counter() #Ende der Messung
print(f'Umwandlungszeit: {time_end - time_start}Sekunden/ {1/(time_end - time_start)}fps')
#Zeichne ein Bild
screen.blit(pygame_image, (0, 0))
pygame.display.update() #Bildschirm aktualisieren
#Warten Sie 5 Sekunden, bis Sie fertig sind
time.sleep(5)
pygame.quit()
if __name__ == '__main__':
main()
Umwandlungszeit: 0.14485926300017127 Sekunden/ 6.903252020540914fps
**langsam! !! !! ** ** **
0,14 Sekunden mit einem Code, der nur angezeigt wird. Wenn Sie 7 fps in Bezug auf die Bildrate schreiben, können Sie diese Langsamkeit erkennen.
Ist dies die Grenze von OpenCV + Pygame? Nein, ist es nicht. Ich mache es einfach falsch. Der Grund, warum es so langsam ist, ist, dass die Bilddaten durch die Methode "tostring ()" absichtlich in eine Zeichenfolge konvertiert werden. Wie Sie anhand der Messung sehen können, sind 90% dieses Gewichts auf die Methode "tostring ()" zurückzuführen.
Die eigentlichen Bilddaten von OpenCV für Python sind NumPys ndarray. Pygame hat eine Funktion, die Bilddaten aus einem Array von NumPy liest. Wie Sie dies voll ausnutzen können, finden Sie unter "OpenCV VideoCapture läuft unter PyGame".
frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
frame = np.rot90(frame)
frame = pygame.surfarray.make_surface(frame)
In Kommentarbereich von "OpenCV VideoCapture läuft auf PyGame" wird die Lösung des durch diese Methode verursachten Bildinversionsproblems + weitere Beschleunigung beschrieben Wird auch beschrieben.
frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
-frame = np.rot90(frame)
+frame = frame.swapaxes(0,1)
frame = pygame.surfarray.make_surface(frame)
Wechseln Sie zu dieser Methode und messen Sie erneut.
show-image.py
import time
import cv2
import pygame
def get_opencv_img_res(opencv_image):
height, width = opencv_image.shape[:2]
return width, height
def convert_opencv_img_to_pygame(opencv_image):
"""
Konvertieren Sie OpenCV-Bilder für Pygame.
see https://gist.github.com/radames/1e7c794842755683162b
"""
rgb_image = cv2.cvtColor(opencv_image, cv2.COLOR_BGR2RGB).swapaxes(0, 1)
#Generieren Sie eine Oberfläche zum Zeichnen von Bildern mit Pygame basierend auf OpenCV-Bildern
pygame_image = pygame.surfarray.make_surface(rgb_image)
return pygame_image
def main():
#Laden Sie Bilder mit OpenCV
image_path = '/usr/share/info/gnupg-module-overview.png' #Der Pfad der Bilddatei, die ursprünglich in Raspbian Buster Lite enthalten war
opencv_image = cv2.imread(image_path)
#Pygame initialisieren
pygame.init()
width, height = get_opencv_img_res(opencv_image)
screen = pygame.display.set_mode((width, height))
#Konvertieren Sie OpenCV-Bilder für Pygame
time_start = time.perf_counter() #Messung starten
pygame_image = convert_opencv_img_to_pygame(opencv_image)
time_end = time.perf_counter() #Ende der Messung
print(f'Umwandlungszeit: {time_end - time_start}Sekunden/ {1/(time_end - time_start)}fps')
#Zeichne ein Bild
screen.blit(pygame_image, (0, 0))
pygame.display.update() #Bildschirm aktualisieren
#Warten Sie 5 Sekunden, bis Sie fertig sind
time.sleep(5)
pygame.quit()
if __name__ == '__main__':
main()
Umwandlungszeit: 0.030075492999912967 Sekunden/ 33.24966277370395fps
Es hat sich sehr verbessert.
Nachdem das Geschwindigkeitsproblem verbessert wurde, sehen wir uns das Ergebnis einer Aktion mit OpenCV an. Angenommen, Sie möchten das binärisierte Ergebnis anzeigen.
show-image.py
import time
import cv2
import pygame
def get_opencv_img_res(opencv_image):
height, width = opencv_image.shape[:2]
return width, height
def convert_opencv_img_to_pygame(opencv_image):
"""
Konvertieren Sie OpenCV-Bilder für Pygame.
see https://gist.github.com/radames/1e7c794842755683162b
"""
rgb_image = cv2.cvtColor(opencv_image, cv2.COLOR_BGR2RGB).swapaxes(0, 1)
#Generieren Sie eine Oberfläche zum Zeichnen von Bildern mit Pygame basierend auf OpenCV-Bildern
pygame_image = pygame.surfarray.make_surface(rgb_image)
return pygame_image
def main():
#Laden Sie Bilder mit OpenCV
image_path = '/usr/share/info/gnupg-module-overview.png' #Der Pfad der Bilddatei, die ursprünglich in Raspbian Buster Lite enthalten war
opencv_image = cv2.imread(image_path)
#Bild verarbeiten
opencv_gray_image = cv2.cvtColor(opencv_image, cv2.COLOR_BGR2GRAY)
ret, opencv_threshold_image = cv2.threshold(opencv_gray_image, 128, 255, cv2.THRESH_BINARY)
opencv_image = opencv_threshold_image
#Pygame initialisieren
pygame.init()
width, height = get_opencv_img_res(opencv_image)
screen = pygame.display.set_mode((width, height))
#Konvertieren Sie OpenCV-Bilder für Pygame
pygame_image = convert_opencv_img_to_pygame(opencv_image)
#Zeichne ein Bild
screen.blit(pygame_image, (0, 0))
pygame.display.update() #Bildschirm aktualisieren
#Warten Sie 5 Sekunden, bis Sie fertig sind
time.sleep(5)
pygame.quit()
if __name__ == '__main__':
main()
Die Ausführung schlägt jedoch mit folgendem Fehler fehl:
OpenCV Error: Assertion failed (scn == 3 || scn == 4) in cvtColor, file /build/opencv-L65chJ/opencv-3.2.0+dfsg/modules/imgproc/src/color.cpp, line 9716
Traceback (most recent call last):
File "show-image.py", line 51, in <module>
main()
File "show-image.py", line 39, in main
pygame_image = convert_opencv_img_to_pygame(opencv_image)
File "show-image.py", line 17, in convert_opencv_img_to_pygame
rgb_image = cv2.cvtColor(opencv_image, cv2.COLOR_BGR2RGB).swapaxes(0, 1)
cv2.error: /build/opencv-L65chJ/opencv-3.2.0+dfsg/modules/imgproc/src/color.cpp:9716: error: (-215) scn == 3 || scn == 4 in function cvtColor
Das binärisierte Bild ist ein Graustufenbild ohne Farbkomponenten. Bei der Konvertierung in ein Bild für Pygame gibt es jedoch einen Code, der die Farbe des Eingabebilds von BGR in RGB konvertiert. Daher tritt in diesem Teil ein Fehler auf.
Um dieses Problem zu lösen, ist für Graustufenbilder ein Verzweigungsprozess erforderlich, um das zweite Argument der Methode "cv2.cvtColor ()" in "cv2.COLOR_GRAY2RGB" zu ändern.
show-image.py
import time
import cv2
import pygame
def get_opencv_img_res(opencv_image):
height, width = opencv_image.shape[:2]
return width, height
def convert_opencv_img_to_pygame(opencv_image):
"""
Konvertieren Sie OpenCV-Bilder für Pygame.
see https://gist.github.com/radames/1e7c794842755683162b
see https://github.com/atinfinity/lab/wiki/%5BOpenCV-Python%5D%E7%94%BB%E5%83%8F%E3%81%AE%E5%B9%85%E3%80%81%E9%AB%98%E3%81%95%E3%80%81%E3%83%81%E3%83%A3%E3%83%B3%E3%83%8D%E3%83%AB%E6%95%B0%E3%80%81depth%E5%8F%96%E5%BE%97
"""
if len(opencv_image.shape) == 2:
#Für Graustufenbilder
cvt_code = cv2.COLOR_GRAY2RGB
else:
#In anderen Fällen:
cvt_code = cv2.COLOR_BGR2RGB
rgb_image = cv2.cvtColor(opencv_image, cvt_code).swapaxes(0, 1)
#Generieren Sie eine Oberfläche zum Zeichnen von Bildern mit Pygame basierend auf OpenCV-Bildern
pygame_image = pygame.surfarray.make_surface(rgb_image)
return pygame_image
def main():
#Laden Sie Bilder mit OpenCV
image_path = '/usr/share/info/gnupg-module-overview.png' #Der Pfad der Bilddatei, die ursprünglich in Raspbian Buster Lite enthalten war
opencv_image = cv2.imread(image_path)
#Bild verarbeiten
opencv_gray_image = cv2.cvtColor(opencv_image, cv2.COLOR_BGR2GRAY)
ret, opencv_threshold_image = cv2.threshold(opencv_gray_image, 128, 255, cv2.THRESH_BINARY)
opencv_image = opencv_threshold_image
#Pygame initialisieren
pygame.init()
width, height = get_opencv_img_res(opencv_image)
screen = pygame.display.set_mode((width, height))
#Konvertieren Sie OpenCV-Bilder für Pygame
pygame_image = convert_opencv_img_to_pygame(opencv_image)
#Zeichne ein Bild
screen.blit(pygame_image, (0, 0))
pygame.display.update() #Bildschirm aktualisieren
#Warten Sie 5 Sekunden, bis Sie fertig sind
time.sleep(5)
pygame.quit()
if __name__ == '__main__':
main()
Sie sollten jetzt auch ein binärisiertes Graustufenbild sehen können.
[Wenn Sie Bilder derselben Größe und Farbe mehrmals konvertieren, z. B. wenn Sie Kamerabilder kontinuierlich verarbeiten, verwenden Sie "pygame.surfarray.blit_array ()" anstelle der Methode "pygame.surfarray.make_surface ()" Sie können es mit der Methode `(https://stackoverflow.com/a/42589544/4907315) beschleunigen.
Lassen Sie uns zunächst die herkömmliche Methode zur Verwendung der Methode "pygame.surfarray.make_surface ()" für jede Konvertierung messen.
show-image.py
import statistics
import time
import cv2
import pygame
def get_opencv_img_res(opencv_image):
height, width = opencv_image.shape[:2]
return width, height
def convert_opencv_img_to_pygame(opencv_image):
"""
Konvertieren Sie OpenCV-Bilder für Pygame.
see https://gist.github.com/radames/1e7c794842755683162b
see https://github.com/atinfinity/lab/wiki/%5BOpenCV-Python%5D%E7%94%BB%E5%83%8F%E3%81%AE%E5%B9%85%E3%80%81%E9%AB%98%E3%81%95%E3%80%81%E3%83%81%E3%83%A3%E3%83%B3%E3%83%8D%E3%83%AB%E6%95%B0%E3%80%81depth%E5%8F%96%E5%BE%97
"""
if len(opencv_image.shape) == 2:
#Für Graustufenbilder
cvt_code = cv2.COLOR_GRAY2RGB
else:
#In anderen Fällen:
cvt_code = cv2.COLOR_BGR2RGB
rgb_image = cv2.cvtColor(opencv_image, cvt_code).swapaxes(0, 1)
#Generieren Sie eine Oberfläche zum Zeichnen von Bildern mit Pygame basierend auf OpenCV-Bildern
pygame_image = pygame.surfarray.make_surface(rgb_image)
return pygame_image
def main():
#Laden Sie Bilder mit OpenCV
image_path = '/usr/share/info/gnupg-module-overview.png' #Der Pfad der Bilddatei, die ursprünglich in Raspbian Buster Lite enthalten war
opencv_image = cv2.imread(image_path)
#Pygame initialisieren
pygame.init()
width, height = get_opencv_img_res(opencv_image)
screen = pygame.display.set_mode((width, height))
#Konvertieren Sie OpenCV-Bilder für Pygame
time_diff_list = []
for _ in range(500):
time_start = time.perf_counter() #Messung starten
pygame_image = convert_opencv_img_to_pygame(opencv_image)
time_end = time.perf_counter() #Ende der Messung
time_diff_list.append(time_end - time_start)
time_diff = statistics.mean(time_diff_list)
print(f'Durchschnittliche Konvertierungszeit: {time_diff}Sekunden/ {1/time_diff}fps')
#Zeichne ein Bild
screen.blit(pygame_image, (0, 0))
pygame.display.update() #Bildschirm aktualisieren
#Warten Sie 1 Sekunde und beenden Sie
time.sleep(1)
pygame.quit()
if __name__ == '__main__':
main()
Durchschnittliche Konvertierungszeit: 0.01808052065800075 Sekunden/ 55.30814177950641fps
Es ist so schnell wie eine Annäherung an 60 fps. Das ist immer noch schnell genug, aber es ist ein bisschen nervig, wenn Sie denken, Sie konvertieren nur.
Als nächstes messen wir die Beschleunigungsmethode mit der Methode pygame.surfarray.blit_array ()
.
show-image.py
import statistics
import time
import cv2
import pygame
def get_opencv_img_res(opencv_image):
height, width = opencv_image.shape[:2]
return width, height
pygame_surface_cache = {}
def convert_opencv_img_to_pygame(opencv_image):
"""
Konvertieren Sie OpenCV-Bilder für Pygame.
see https://gist.github.com/radames/1e7c794842755683162b
see https://github.com/atinfinity/lab/wiki/%5BOpenCV-Python%5D%E7%94%BB%E5%83%8F%E3%81%AE%E5%B9%85%E3%80%81%E9%AB%98%E3%81%95%E3%80%81%E3%83%81%E3%83%A3%E3%83%B3%E3%83%8D%E3%83%AB%E6%95%B0%E3%80%81depth%E5%8F%96%E5%BE%97
see https://stackoverflow.com/a/42589544/4907315
"""
if len(opencv_image.shape) == 2:
#Für Graustufenbilder
cvt_code = cv2.COLOR_GRAY2RGB
else:
#In anderen Fällen:
cvt_code = cv2.COLOR_BGR2RGB
rgb_image = cv2.cvtColor(opencv_image, cvt_code).swapaxes(0, 1)
#Holen Sie sich eine generierte Oberfläche aus dem Cache mit derselben Bildgröße
cache_key = rgb_image.shape
cached_surface = pygame_surface_cache.get(cache_key)
if cached_surface is None:
#Generieren Sie eine Oberfläche zum Zeichnen von Bildern mit Pygame basierend auf OpenCV-Bildern
cached_surface = pygame.surfarray.make_surface(rgb_image)
#Oberfläche zum Cache hinzufügen
pygame_surface_cache[cache_key] = cached_surface
else:
#Wenn Sie eine Oberfläche mit derselben Bildgröße finden, verwenden Sie die bereits generierte Oberfläche erneut.
pygame.surfarray.blit_array(cached_surface, rgb_image)
return cached_surface
def main():
#Laden Sie Bilder mit OpenCV
image_path = '/usr/share/info/gnupg-module-overview.png' #Der Pfad der Bilddatei, die ursprünglich in Raspbian Buster Lite enthalten war
opencv_image = cv2.imread(image_path)
#Pygame initialisieren
pygame.init()
width, height = get_opencv_img_res(opencv_image)
screen = pygame.display.set_mode((width, height))
#Konvertieren Sie OpenCV-Bilder für Pygame
time_diff_list = []
for _ in range(500):
time_start = time.perf_counter() #Messung starten
pygame_image = convert_opencv_img_to_pygame(opencv_image)
time_end = time.perf_counter() #Ende der Messung
time_diff_list.append(time_end - time_start)
time_diff = statistics.mean(time_diff_list)
print(f'Durchschnittliche Konvertierungszeit: {time_diff}Sekunden/ {1/time_diff}fps')
#Zeichne ein Bild
screen.blit(pygame_image, (0, 0))
pygame.display.update() #Bildschirm aktualisieren
#Warten Sie 1 Sekunde und beenden Sie
time.sleep(1)
pygame.quit()
if __name__ == '__main__':
main()
Durchschnittliche Konvertierungszeit: 0.013679669161995207 Sekunden/ 73.1011830884182fps
Es hat 60fps überschritten! Wenn es so schnell ist, wird es praktisch genug sein.
def convert_opencv_img_to_pygame(opencv_image):
"""
Konvertieren Sie OpenCV-Bilder für Pygame.
see https://gist.github.com/radames/1e7c794842755683162b
see https://github.com/atinfinity/lab/wiki/%5BOpenCV-Python%5D%E7%94%BB%E5%83%8F%E3%81%AE%E5%B9%85%E3%80%81%E9%AB%98%E3%81%95%E3%80%81%E3%83%81%E3%83%A3%E3%83%B3%E3%83%8D%E3%83%AB%E6%95%B0%E3%80%81depth%E5%8F%96%E5%BE%97
"""
if len(opencv_image.shape) == 2:
#Für Graustufenbilder
cvt_code = cv2.COLOR_GRAY2RGB
else:
#In anderen Fällen:
cvt_code = cv2.COLOR_BGR2RGB
rgb_image = cv2.cvtColor(opencv_image, cvt_code).swapaxes(0, 1)
#Generieren Sie eine Oberfläche zum Zeichnen von Bildern mit Pygame basierend auf OpenCV-Bildern
pygame_image = pygame.surfarray.make_surface(rgb_image)
return pygame_image
Wenn Sie Bilder derselben Größe immer wieder konvertieren möchten:
pygame_surface_cache = {}
def convert_opencv_img_to_pygame(opencv_image):
"""
Konvertieren Sie OpenCV-Bilder für Pygame.
see https://gist.github.com/radames/1e7c794842755683162b
see https://github.com/atinfinity/lab/wiki/%5BOpenCV-Python%5D%E7%94%BB%E5%83%8F%E3%81%AE%E5%B9%85%E3%80%81%E9%AB%98%E3%81%95%E3%80%81%E3%83%81%E3%83%A3%E3%83%B3%E3%83%8D%E3%83%AB%E6%95%B0%E3%80%81depth%E5%8F%96%E5%BE%97
see https://stackoverflow.com/a/42589544/4907315
"""
if len(opencv_image.shape) == 2:
#Für Graustufenbilder
cvt_code = cv2.COLOR_GRAY2RGB
else:
#In anderen Fällen:
cvt_code = cv2.COLOR_BGR2RGB
rgb_image = cv2.cvtColor(opencv_image, cvt_code).swapaxes(0, 1)
#Holen Sie sich eine generierte Oberfläche aus dem Cache mit derselben Bildgröße
cache_key = rgb_image.shape
cached_surface = pygame_surface_cache.get(cache_key)
if cached_surface is None:
#Generieren Sie eine Oberfläche zum Zeichnen von Bildern mit Pygame basierend auf OpenCV-Bildern
cached_surface = pygame.surfarray.make_surface(rgb_image)
#Oberfläche zum Cache hinzufügen
pygame_surface_cache[cache_key] = cached_surface
else:
#Wenn Sie eine Oberfläche mit derselben Bildgröße finden, verwenden Sie die bereits generierte Oberfläche erneut.
pygame.surfarray.blit_array(cached_surface, rgb_image)
return cached_surface
Recommended Posts