Найдите формат файла изображения cv2

Я пишу проект ROS2. Я получаю изображение с камеры и хочу транслировать его на веб-страницу. Для этого мне нужно закодировать его в Base64 и отправить на веб-страницу. Сейчас я делаю это так:

self.bridge = cv_bridge.CvBridge() 

def callback_color_image_raw(self,msg):
    try:
      # Decode the ROS2 Img data. There is barely any 
      # documentation on this so I dont know how it saves the imgdata
      self.frame = self.bridge.imgmsg_to_cv2(msg, "bgr8")
    except CvBridgeError as e:
      print(str(e))

    self.frame = cv2.imencode('.jpg',self.frame)[1]
    self.frame = self.frame.tobytes()
    image_64_encode = base64.b64encode(self.frame)
    self.image_encoded = image_64_encode.decode('utf-8')

Могу ли я найти формат изображения self.frame с помощью команды CV? Во что imgmsg_to_cv2 конвертируется? Я хочу знать, нужно ли мне преобразовывать код в jpg или нет (это уже формат jpg?).

Когда я делаю type(self.frame), я получаю <class 'numpy.ndarray'> (до и после imencode), так есть ли способ получить формат из этого?

Это не так просто, как поиск магических байтов, потому что файл все еще находится в np.ndarray. Однако более позднее закодированное изображение также является np.ndarray, что означает, что эти массивы представляют jpg, png и т. Д. Без магических байтов, но необработанные данные. Пожалуйста, прекратите связывать меня со статьями, объясняющими магические байты.

Под форматом я подразумеваю jpg, png, bmp и т. Д.


person blstft    schedule 09.04.2021    source источник
comment
команда вашего типа говорит, что у вас уже есть только массив с числами. Я должен правильно отформатировать это изображение. Вы должны посмотреть библиотеку подушек для этого   -  person user3732793    schedule 12.04.2021