Для каждого изображения вычислить HSV гистограмму:
Mat src_mat = imread("./image.jpg");
Mat hsv_mat;
cvtColor(src_mat, hsv_mat, CV_BGR2HSV);
MatND HSV_histogram;
int histSize[] = { 240, 240 };
float h_ranges[] = { 0, 255 };
float s_ranges[] = { 0, 180 };
const float* ranges[] = { h_ranges, s_ranges };
int channels[] = { 0, 1 };
calcHist(&hsv_mat, 1, channels, Mat(), HSV_histogram, 2, histSize, ranges, true, false);
normalize(HSV_histogram, HSV_histogram, 0, 1, NORM_MINMAX, -1, Mat());
Затем сделать попарное сравнение и получить оценку подобия:
double score_ij = compareHist(HSV_histogram_i, HSV_histogram_j, CV_COMP_BHATTACHARYYA);
Вы можете увеличить точность путем деления изображения на более мелкие участки и среднее значение на основании Результаты.
Сравнение изображений для сходства нетривиально. Какие изображения вы сравниваете и как они связаны? –
http://stackoverflow.com/questions/2644787/precisely-compare-2-images-for-differences-using-opencv – karlphillip
http://stackoverflow.com/questions/4550458/opencv-compare-two-images-and -get-different-pixels – karlphillip