Я пишу проект 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 и т. Д.