У меня есть небольшая проблема при работе с неискаженной функцией OpenCV. Я работаю с камерой, используя широкоугольный объектив. Допустим, мой доступ к нему проблематичен, так как он уже установлен. Проблема в основном сводится к следующему:
Я успешно измерил все параметры объектива и могу без проблем искажать полнокадровое изображение, проблема в том, что я на самом деле работаю в режиме линейного сканирования. Мы используем только вырез в середине датчика, около 100 пикселей в высоту. Изображения для иллюстрации:
Теперь, если я применю неискаженное значение к области интереса рассматриваемого изображения, оно, естественно, предполагает, что это вырез в верхней части полного кадра, поэтому коррекция в значительной степени отличается от той, которая должна быть примерно на полпути вниз. высота полного кадра.
Я понимаю, как можно изменить матрицу камеры, чтобы компенсировать масштаб изображения, если бы я использовал полнокадровый снимок только с более низким разрешением, но вопрос заключается в следующем: могу ли я каким-либо образом компенсировать обрезанный сдвиг для достижения правильного преобразования?
Я подумал, что мог бы использовать черное изображение с полным разрешением кадра и просто скопировать соответствующие данные в его середину, но об этом не может быть и речи, поскольку скорость обработки в этом случае была бы слишком большой.
Спасибо за любые идеи!
Ура,
Январь
Если вы обрезаете изображение, то главная точка будет иметь разные координаты. Например, если ваша исходная главная точка была в (30,40), и вы обрезали 10 пикселей вокруг сторон, то ваша новая главная точка будет в (20,30), потому что пиксель (20,30) в обрезанное изображение совпадает с пикселем (30,40) в исходном изображении.
Вам необходимо соответствующим образом настроить значения cx и cy в матрице камеры.
Других решений пока нет …