Создайте мишень точного размера, распечатайте её прямо из браузера и проверьте масштаб контрольной линейкой.
OpenCV 4.13: замените target.png на снимок мишени. Размеры в коде — миллиметры. Параметры и этот код напечатаны на листе.
Принтер искажает масштаб неравномерно по листу, поэтому одна поправка не исправит мишень.
Инструмент генерирует мишень точного размера для калибровки камеры и печатает её прямо из браузера: шахматную доску, сетку кругов (симметричную и асимметричную), ChArUco-доску и линейку для проверки масштаба. Все размеры задаются в миллиметрах, рядом печатаются параметры мишени и готовый код для OpenCV, чтобы программа калибровки получила те же числа.
Пример 1. Поле зрения 100 × 75 мм. Шахматная доска 9 × 7 клеток по 10 мм даёт 8 × 6 внутренних углов и занимает 90 × 70 мм — почти всё поле, при этом на клетку приходится достаточно пикселей у любой камеры от 1,3 Мп.
Пример 2. Поле 500 × 400 мм и камера 2448 × 2048 px: разрешение около 4,9 px/мм. Клетка 25 мм занимает 122 px — уверенное обнаружение углов; доска 19 × 15 клеток по 25 мм закрывает 475 × 375 мм.
Пример 3. Мишень напечатана на А4 с масштабом «по размеру страницы»: линейка показывает 97 мм вместо 100. Печать нужно повторить с масштабом 100 %, иначе калибровка получит неверные размеры.
Шахматную доску — для большинства задач. Сетку кругов — когда важна точность центров при перспективе. ChArUco — когда мишень может быть частично закрыта или снята под большим углом: метки позволяют опознать каждую клетку.
Измерить линейку на отпечатке штангенциркулем или стальной линейкой: контрольное расстояние должно совпасть с напечатанной подписью. При расхождении отключить масштабирование в диалоге печати.
Такого, чтобы в кадре на неё приходилось хотя бы несколько десятков пикселей, а вся мишень занимала значительную часть поля зрения. Разрешение на объекте можно посчитать в инструменте подбора оптики.
Готовый фрагмент на Python для OpenCV 4.13 с параметрами именно этой мишени в миллиметрах. Достаточно заменить имя файла со снимком и запустить.