Запуск:
python3 -m fisheye_fix.py \
--source in.jpg # Входное изображение/видео или URL (обязательно)
--out-img res.jpg # Путь для сохранения выпрямленного изображения
--out-calib calib.json # Путь для сохранения подобранных настроек по выпрямлению изображения
--show # Флаг, чтобы посмотреть выпрямленное изображение в окне программыПосле запуска скрипта с аргументами, указанными выше, откроется окно с входным изображением. Выберите на изображении предмет, который в реальности прямой, но на изображении изогнутый, например, бордюр вдоль дороги. Начиная от края этого бордюра расставляйте мышкой точки по всей длине бордюра до его конца.
Можно выбрать на изображении несколько таких линий, чтобы закончить выбирать текущую и перейти к следующей,
нажмите на клавиатуре букву n.
Если захотите отменить выбор последней точки, нажмите u.
Чтобы отменить все точки, нажмите r.
Если Вы закончили и хотите выпрямить изображение по указанным точкам, нахмите Enter.
Чтобы выйти из программы, нажмите q.
Изображение с камеры до применения коррекции:

Изображение с камеры после применения коррекции:

Как видно выше, забор вдоль дороги и бордюры расположены горизонтально.
Полученный файл коррекции calib.json:
{
"image_width": 1920,
"image_height": 1080,
"K": [
[
1739.237279181759,
0.0,
947.5335576199107
],
[
0.0,
2244.705015334057,
564.6946579168148
],
[
0.0,
0.0,
1.0
]
],
"D": [
-0.37062084436192333,
0.05057465862770827,
0.033198096980616335,
0.012812747166936252
],
"balance": 0.0,
"model": "opencv_fisheye_k1k2k3k4"
}Первая публичная камера, которая использовалась в нашем проекте, имела широкоугольный объектив.
Поскольку labeler подразумевает выбор парковочных зон с прямыми сторонами, было невозможно
корректно выбрать парковочные зоны на изображении без коррекции искривления изображения.
Само изображение с камеры мы выпрямлять не стали, зато использовали полученный этим скриптом файл calib.json
для отрисовки парковочных зон на камере с изогнутыми сторонами, что соответствовало правильному расположению
парковок и позволило правильно относить машины к тем или иным зонам.