#python #opencv #image-processing #data-augmentation
#python #opencv #обработка изображений #увеличение данных
Вопрос:
Я пытаюсь случайным образом повернуть некоторые изображения с аннотациями, я пытаюсь понять, как получить новое местоположение точки после поворота, мои изображения имеют разные формы
Пример того, что я пытаюсь сделать: эта функция для вычисления новой позиции в соответствии с этим ответом (здесь)
def new_pixel(x,y,theta,X,Y):
sin = math.sin(theta)
cos = math.cos(theta)
x_new = (x-X/2)*cos (y-X/2)*sin X/2
y_new = -(x-X/2)*sin (y-Y/2)*cos Y/2
return int(x_new),int(y_new)
код открытого исходного изображения:
img = cv2.imread('D://ubun/1.jpg')
print(img.shape)
X, Y, c = img.shape
p1 = (124,291)
p2 = (168,291)
p3 = (169,391)
p4 = (125,391)
img1 = img.copy()
cv2.circle(img1, p1, 10, color=(255,0,0), thickness=2)
plt.imshow(img1)
красная точка — это точка
код для поворота:
rotated = ndimage.rotate(img, 45)
print(rotated.shape)
p11 = new_pixel(p1[0],p1[1],45,X,Y)
p22 = new_pixel(p2[0],p2[1],45,X,Y)
p33 = new_pixel(p3[0],p3[1],45,X,Y)
p44 = new_pixel(p4[0],p4[1],45,X,Y)
cv2.circle(rotated, p11, 10, color=(255,0,0), thickness=2)
plt.imshow(rotated)
Изображение после поворота и увидеть точку не в правильном положении после поворота:
Я заметил, что форма изображения меняется после поворота, влияет ли это на вычисления?
Комментарии:
1. Извините, я не могу дать ответ прямо сейчас, но это аффинное преобразование, и если вы можете создать правильную матрицу аффинного преобразования, вы можете использовать ее для отправки координаты в преобразованную систему координат
2. Причина в том, что выходное изображение изменяет размер при повороте относительно входного изображения.
3. Ваш размер X / Y изменяется во время поворота, но ваше происхождение остается прежним (вверху слева). Вероятно, вам придется умножить вычисленные точки X и Y на отношение длин сторон двух изображений (соотношение ширины для X, высоты для Y). Просто мысль. Вы также вращаетесь вокруг точки (ширина / 2, высота / 2), вы можете вручную вычислить новую точку XY, просто выполнив базовую тригонометрию.
4. спасибо, я также думаю, что проблема заключается в форме изображения после поворота
5. Все еще нерешенный):