Це величезна тема, з відповідями з 3 рядків коду до цілих наукових журналів.
Я викладу найпоширеніші такі методи та їх результати.
Порівнюючи гістограми
Один із найпростіших та найшвидших методів. Запропонований десятиліттями тому, як засіб пошуку однозначності зображення. Ідея полягає в тому, що в лісі буде багато зеленого, а людське обличчя - багато рожевого, чи ще чого. Отже, якщо порівнювати дві картинки з лісами, ви отримаєте деяку схожість між гістограмами, оскільки у вас багато зеленого в обох.
Знизу: це занадто спрощено. Банан і пляж будуть виглядати однаково, оскільки обидва жовті.
Метод OpenCV: порівнятиHist ()
Збіг шаблонів
Хороший приклад тут matchTemplate, який знаходить хорошу відповідність . Він поєднує зображення пошуку з тим, на якому здійснюється пошук. Зазвичай використовується для пошуку менших частин зображення у більшій.
Недоліки: вона повертає лише хороші результати з однаковими зображеннями, однакового розміру та орієнтації.
Метод OpenCV: matchTemplate ()
Відповідність функцій
Вважається одним із найефективніших способів пошуку зображень. Ряд функцій витягується із зображення таким чином, що гарантує однакові функції знову будуть розпізнані навіть при повороті, масштабуванні чи перекосі. Витягнуті таким чином функції можна співставити з іншими наборами зображень. Ще одне зображення, що має високу частку характеристик, що відповідають першому, вважається таким, що зображує ту саму сцену.
Пошук гомографії між двома наборами точок дозволить вам також знайти відносну різницю кута зйомки між вихідними зображеннями або величину перекриття.
Є цілий ряд OpenCV підручників / зразків на це, і гарне відео тут . Цьому присвячений цілий модуль OpenCV (features2d).
Недоліки: це може бути повільним. Це не ідеально.
На сайті OpenCV Q&A я говорю про різницю між дескрипторами функцій, які чудові при порівнянні цілих зображень та дескрипторів текстур, які використовуються для ідентифікації об'єктів, таких як обличчя людини чи машини на зображенні.