Я использую фильтр графа DirectShow для захвата кадров из видео. Текущая реализация следует этому графику:
SourceFilter-> SampleGrabber-> NullRenderer
Это работает большую часть времени для извлечения изображений кадр за кадром для дальнейшей обработки. Однако я столкнулся с проблемами с некоторыми видео, которые не имеют PAR 1: 1. Эти изображения появляются растянутыми на моих этапах обработки.
Единственный способ исправить это, который я нашел на данный момент, это использовать средство визуализации VMR9 в режиме без окон, которое использует GetCurrentImage () для извлечения растрового изображения с правильным соотношением сторон. Но этот метод не очень полезен для непрерывного захвата тысяч кадров.
Теперь у меня вопрос: как лучше всего решить эту проблему? Кто-нибудь тоже сталкивался с этой проблемой?
Sample Grabber дает вам кадры с оригинальными пикселями. Это не совсем проблема, если есть соотношение сторон и пиксели не являются «квадратными пикселями». Для преобразования в квадратные пиксели вам просто необходимо растянуть изображение соответственно. Вам будет проще выполнить этот шаг масштабирования вне конвейера DirectShow, и у вас есть все необходимые данные: пиксели и исходный тип носителя. Вы можете рассчитать соответствующее разрешение с квадратными пикселями и изменить размер изображения.