Пишу модуль для программы наблюдения за казино.
Немного контекста:
У меня есть несколько изображений из видео, извлеченных в разное время. У меня всегда есть справочная колода в фиксированной позиции, размер которой я знаю. Предполагается, что искажение, фокусное расстояние камеры и расстояние неизвестны (это будет коммерческий пакет программного обеспечения, поэтому эти параметры неизвестны).
Работает в настоящее время:
Я применил хитрое обнаружение краев и houghlines, чтобы получить высоту в пикселях двух колод. Также известны координаты всех углов передней части деки, поскольку она всегда находится в фиксированном положении с одинаковой ориентацией.
Проблема начинается, когда эталонная дека находится не на том же расстоянии, что и дека, которые я пытаюсь измерить, но ближе к камере. В этом случае, поскольку одна из колод находится ближе к камере, обе колоды могут иметь одинаковую высоту в пикселях, хотя та, что сзади, содержит больше карт.
Вот наглядный пример:
На самом деле в обеих колодах 52 карты, но у ближайшей к камере - 83 пикселя, а у задней - 63 пикселя.
Как я могу нормализовать значения, которые у меня есть для ссылки на колоду в фоновом режиме? Я нашел вопрос, который делает что-то похожее на вычисление размера при перемещении внутри изображения, но в нем используется openGL, с которым я не знаком (Как мне перевернуть 2D-точки в 3D?). Я пытаюсь добиться этого с помощью библиотеки компьютерного зрения / обработки изображений (в настоящее время я использую ImageMagick для четких краев и линий резкости) в Python (я открыт для предложений по использованию другого языка программирования, если вы считаете, что Python не подходит).
РЕДАКТИРОВАТЬ:
Подводя итог тому, чего я пытаюсь достичь: я хочу знать, как эти два объекта сравниваются по высоте. Как мне масштабировать один сзади, чтобы он был по размеру, если бы он находился рядом с тем, что спереди, чтобы я мог сравнить их?