Доброго дня!
Пытаюсь оптимизировать производительность программы, использую OpenCV, C++, MinGW.
Проблема в том, что сейчас очень много времени занимает функция absdiff (400 миллисекунд).
До подачи на неё Mat обрезаю их по ROI, что бы размеры массивов уменьшить, но дальше не знаю, как ещё улучшить.
Сама задача - найти, на сколько одна картинка отличается от другой, что бы в дальнейшем найти наименьше отличающуюся пару.
Может быть есть более быстрые способы, но без потери точности?
absdiff в OpenCV весьма эффективна. Вам нужно свёртывание - вычисление меньшего слепка с усилением интересующих отличий. В простейшем случае, обычное уменьшение размера в 2-4 раза.
Kalombyr, сильно зависит от выбранного способа уменьшения, но даже быстрого k-NN хватит для поиска дубликатов фото. Более сложные способы, например свёртывание в матрицу фиксированного размера, при котором каждый пиксель вносит вклад в результирующее значение, уже даст значительно лучший результат. Попиксельное сравнение, оставьте на крайний случай, например для поиска артефактов сжатия.
Я не думаю, что тут проблема в OpenCV, т.к. такие вещи обычно очень хорошо оптимизированы. Тут, скорее всего, просто алгоритм не сильно эффективно работает. Без кода точно сказать сложно.