Python-Kivy cascade training: как получить координаты касания относительно изображения?

Я пытаюсь сделать каскадное обучающее приложение на Python и Kivy, в котором вы можете легко загрузить изображение и увеличить и повернуть изображение с помощью мультитач и указать двойным касанием объекты, которые я хочу обрезать изображение, чтобы сохранить их в отдельной папке, чтобы использовать lateron для обучения каскадного классификатора. Проблема, с которой я сейчас сталкиваюсь, заключается в том, что я получаю только координаты окна, которые мне не удается преобразовать в координаты изображения с помощью to_parant и т. д. Любое предложение решить эту проблему было бы очень приветствуется!

if touch.is_double_tap:
     user_textinput = self.ids['user_textinput'] # change the text in the box where the user can put in the file directory by the created image name 
     image = cv2.imread(user_textinput.text)
     x = int(touch.x)
     y = int(touch.y)
     w_double = 30
     h_double = 30

     crop_img = image[x-w_double/2:y-h_double/2, w_double:h_double] # Crop from x, y, w, h
     cv2.imwrite("positive.jpg", crop_img)

     cv2.rectangle(image,(x-w_double/2,y-h_double/2),(x+w_double/2,y+h_double/2),(255,255,255),3)              
     feedback_img_dir = 'product_pictures/feedback_' + str(time.strftime("%Y%m%d%H%M%S"))  + ".jpg"   # create name for image with a time stamp   
     cv2.imwrite(feedback_img_dir, image)
     print "feedback_img saved as " + feedback_img_dir

     user_textinput = self.ids['user_textinput'] # change the text in the box where the user can put in the file directory by the created image name 
     user_textinput.text = str(feedback_img_dir) 
else:
   return super(GUI, self).on_touch_down(touch) # assures that if noth double click or ... the other withgets can still be used

1 ответ

  1. To_parent (и друзья) требуется только изменить из одной системы координат в другую, например, когда e.g используется RelativeLayout или ScrollView, за исключением того, что положение вашего изображения находится в системе координат, в которой оно получает событие касания, и его положение относительно него, поэтому вам просто нужно подстроить его положение к положению касания, чтобы получить его относительно.

    X, Y = touch.x - image.x, touch.y - image.y
    

    В качестве альтернативы, вы можете вложить изображение в Относительноеout, чтобы непосредственно получить эту трансформацию.