Я сталкиваюсь с необъяснимым поведением при использовании функции cv2.remap в Opencv. Я сделал функцию, которая переводит координату y каждого пикселя вверх на число, которое отличается на каждой x-координате. Число вычисляется в соответствии с лежащей в основе кривой, которая начинается с x = 0 и заканчивается на x = 640 (для изображения 360 x 640)Неожиданное поведение при использовании OpenCV-переназначения в Python
Около недели назад я разместил вопрос on the same subject, но с другой проблемой - верх часть изображения была обрезана. На это был дан ответ, и я понял, что проблема заключается в том, что несколько пикселей от исходного изображения были сопоставлены с теми же позициями в новом изображении, и поэтому пиксели, которые сначала были отображены на верхние части, были перезаписаны другими из нижних частей.
Однако проблема, с которой я сейчас сталкиваюсь, немного отличается, поэтому я разместил новый вопрос. В этом случае проблема в том, что, поскольку я поднимаю все y-координаты вверх, я ожидаю, что нижняя часть изображения будет пустым. Это достигается с помощью приведенной ниже части кода
original = cv2.imread('C:\\Users\\User\\Desktop\\alaskan-landscaps3.jpg')
y_size,x_size=original.shape[:2]
map_x = np.zeros(original.shape[:2], np.float32)
map_y = np.zeros(original.shape[:2], np.float32)
for i in range(0, y_size):
for j in range(0,x_size):
map_y[i][j]=i+yvalues[j]
map_x[i][j] = j
, где yvalues[j]
является у-координата кривой в точке х-координаты у. Конечно, при печати у-отображений для первых 10 строк массива map_y при х = 383 наималейшего номер 199,102
for j in range(0, 360):
print('At x=383,y=' + str(j) + ' mapping of y-coordinate is:' + str(map_y[j][383]))
At x=383,y=0 mapping of y-coordinate is:199.102
At x=383,y=1 mapping of y-coordinate is:200.102
At x=383,y=2 mapping of y-coordinate is:201.102
At x=383,y=3 mapping of y-coordinate is:202.102
At x=383,y=4 mapping of y-coordinate is:203.102
At x=383,y=5 mapping of y-coordinate is:204.102
At x=383,y=6 mapping of y-coordinate is:205.102
Когда я использовать более сложную функцию коробления я получить следующие результаты для того же само первые 10 строк - идея в том, что ряд последовательных пикселей в вертикальном направлении, должен быть отображен в том же пиксел в новом изображении
At x=383,y=0mapping is:199.102
At x=383,y=1mapping is:199.102
At x=383,y=2mapping is:199.102
At x=383,y=3mapping is:199.102
At x=383,y=4mapping is:199.102
At x=383,y=5mapping is:200.102
At x=383,y=6mapping is:200.102
At x=383,y=7mapping is:200.102
At x=383,y=8mapping is:200.102
At x=383,y=9mapping is:201.102
At x=383,y=10mapping is:201.102
Однако на этот раз, то изображение не будет полностью заполнено, и нет пустое место в нижней части. Вы можете видеть оба изображения ниже:
(некачественно эффект не то, что я предполагал, но это для меня, чтобы исправить :)). Я проверил все записи конкретного столбца в массиве map_y
для x = 383, и все значения> 199.102, поэтому, похоже, это не та же проблема, что и в предыдущем случае, т. Е. В столбце нет пикселей выше нанесенный на нижнюю часть.
Итак, мой вопрос в том, что отличается между двумя сопоставлениями, вызвавшими это радикальное изменение? Я ожидал, что, поскольку отображения второго изображения также начинаются с высокой ценности, также было бы пустое место внизу.
Извинения за длинный пост, но я пытался выяснить причину для нескольких дней и не вышло ни одного мудрее. Любая помощь будет оценена.
Вы правы, я неправильно понял, как работает функция сопоставления. Теперь мне удалось преобразовать изображение, как ожидалось. Спасибо! – Socrats