Как 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)