Метод сравнения изображений с С++ и OpenCV

Я новичок в OpenCV. Я хотел бы знать, можем ли мы сравнить два изображения (одно из изображений, сделанных фотошопом, исходным изображением, а другое - с камеры) и найти, являются ли они такими же или нет. Я попытался сравнить изображения с помощью сопоставления с шаблонами. Это не работает. Можете ли вы рассказать мне, какие другие процедуры мы можем использовать для такого сравнения?

Ответ 1

Сравнение изображений может осуществляться по-разному в зависимости от того, какую цель вы имеете в виду:

  • если вы просто хотите сравнить, являются ли два изображения приблизительно одинаковыми (с несколькими     различия яркости), но с той же перспективой и видом камеры вы можете просто     вычислить разницу в пикселях в пиксель, для каждой цветовой полосы. Если сумма квадратов выше     два изображения меньше порога, с которым сопоставляются изображения, в противном случае нет.
  • Если одно изображение является черно-белым вариантом другого, преобразование цветных изображений     (см., например, http://www.johndcook.com/blog/2009/08/24/algorithms-convert-color-grayscale). Afterwarts просто выполняют описанный выше шаг.
  • Если одно изображение является прообразом другого, вам необходимо выполнить регистрацию двух     изображений. Это означает определение масштаба, возможное вращение и XY-перевод, который     необходимо уложить подвид на более крупном изображении (для способов регистрации изображений см.     Pluim, J.P.W., Maintz, J.B.A., Viergever, M.A., Взаимно-информационная регистрация     медицинские изображения: обзор, IEEE Transactions on Medical Imaging, 2003, том 22, выпуск 8,     стр. 986 - 1004)
  • Если у вас есть перспективы различий, вам нужен алгоритм для размещения одного изображения для     как можно лучше совпадают друг с другом. Для того, чтобы выглядеть так,     http://javaanpr.sourceforge.net/anpr.pdf со страницы 15 и далее.

Удачи!

Ответ 2

Вы должны попробовать SIFT. Вы применяете SIFT к вашему маркеру (изображение, сохраненное в памяти), и вы получаете некоторые дескрипторы (точки, которые необходимо распознать). Затем вы можете использовать алгоритм FAST с кадрами камеры, чтобы найти совпадающие ключевые точки маркера в изображении камеры. У вас много тем по этой теме:

Как получить прямоугольник вокруг целевого объекта с помощью функций, извлеченных SIFT в OpenCV

Как выполнить поиск изображения для объекта с помощью SIFT и OpenCV?

OpenCV - сопоставление объектов с использованием дескрипторов SURF и BruteForceMatcher

Удачи.