Как mss.mss() передать через скокет, а потом отобразить на экране(cv2)

Мне нужно сделать скриншот с помощью модуля mss (sct.grab(mon)), передать через socket, а потом отобразить на экране с помощью модуля cv2 (cv2.imshow()).

import mss
from mss import tools

sct = mss.mss()
mon = {'left': 0, 'top': 0, 'width': 384, 'height': 216}
img = sct.grab(mon)
bytes_img = tools.to_png(img.bgra, img.size) # Перевожу в байты

Теперь нужно отобразить картинку в cv2.imshow. Пытался сделать так

from cv2 import cv2

cv2.imshow('screenshot', bytes_img)

Не работает, как исправить?


Ответы (1 шт):

Автор решения: Renser

Проблему я решил. Решение взял отсюда: https://stackoverflow.com/questions/17170752/python-opencv-load-image-from-byte-string

from mss import mss
from mss import tools
import numpy as np
import cv2

sct = mss()
mon = {'left': 0, 'top': 0, 'width': 768, 'height': 432}
img = sct.grab(mon) # Делаю скриншот
img = tools.to_png(img.rgb, img.size) # Кодирую в байты
img = np.frombuffer(img, np.uint8) # Преобразую байты в numpy-массив
img = cv2.imdecode(img, cv2.IMREAD_COLOR) # Перевожу в понятный cv2 формат

cv2.imshow('screenshot', img) # Отображаю на экране
cv2.waitKey(0)
→ Ссылка