Я пытаюсь создать приложение для каскадного обучения в Python и Kivy, в котором вы можете легко загрузить изображение, увеличить и повернуть изображение с помощью мультитач и указать с двойным касанием объекты, которые я хочу обрезать, чтобы сохранить изображение их в отдельной папке для использования латерана для обучения каскадного классификатора. Проблема, с которой я сейчас сталкиваюсь, заключается в том, что я получаю только координаты окна, которые мне не удается преобразовать в координаты изображения, используя to_parant и т. Д. Любое предложение для решения этой проблемы было бы очень желанным!Python - Kivy cascade training: Как получить координаты касания относительно изображения?
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, это сработает, но в настоящее время я показываю изображение в режиме рассеяния, чтобы включить масштабирование и вращение двойного касания и трансляцию с одним касанием. Любые предложения о том, как получить правильные координаты в этом случае? – JEPE
Ну, если вы используете Scatter, он уже получает правильное положение, если вы хотите сделать чек в своей системе координат из другого виджета, тогда вам понадобится метод scatter.to_widget(). Тем не менее, я не уверен, что обрезка будет работать так, как вы намереваетесь таким образом, особенно если речь идет о ротации, более полная версия кода поможет, поэтому можно увидеть, как связаны Scatter и код. Лучшим решением может быть использование FBO для отображения текущего состояния разброса в системе координат родителя и обрезание этого. – Tshirtman