функция blit_buffer закрывает приложение Kivy без какого-либо предупреждения

#python #image #opencv #kivy #ros

#python #изображение #opencv #kivy #ros

Вопрос:

Я хотел бы преобразовать изображение датчика ROS в текстуру Kivy. Но blit_buffer закрывает приложение без какого-либо сообщения. Я проверил, что цветовой формат sensor_msg равен bgr8. Я не знаю, в чем проблема, потому что нет сообщения об ошибке.

 def convert_to_texture(self, sensor_msg):
    cv_image = CvBridge().imgmsg_to_cv2(sensor_msg, "bgr8")
    resized_image = cv2.resize(cv_image, (900, 450))

    buf = cv2.flip(resized_image, 0).tostring()

    texture = Texture.create(size=(resized_image.shape[1], resized_image.shape[0]), colorfmt="bgr")
    texture.blit_buffer(buf, colorfmt="bgr", bufferfmt="ubyte")
  

Ответ №1:

Я видел это раньше. Я считаю, что texture.blit_buffer() это должно быть сделано в основном потоке. Я не нашел никакой документации, в которой это говорится, но это был мой опыт. Попробуйте что-то вроде этого:

 def convert_to_texture(self, sensor_msg):
    cv_image = CvBridge().imgmsg_to_cv2(sensor_msg, "bgr8")
    resized_image = cv2.resize(cv_image, (900, 450))

    buf = cv2.flip(resized_image, 0).tostring()

    texture = Texture.create(size=(resized_image.shape[1], resized_image.shape[0]), colorfmt="bgr")
    # texture.blit_buffer(buf, colorfmt="bgr", bufferfmt="ubyte")
    Clock.schedule_once(partial(self.updateTexture, texture, buf))

    def updateTexture(self, texture, buf, *args):
        texture.blit_buffer(buf, colorfmt='bgr', bufferfmt='ubyte')