2011-02-09 6 views
1

Я ищу способ сравнения 2 изображений и получения наиболее подходящего изображения в качестве вывода. Использование функции гистограммы в OpenCV Могу ли я это сделать?функция гистограммы в OpenCV

Может ли кто-нибудь мне помочь?

Но я не знаю, как это сделать, поскольку я не очень хорошо знаком с OpenCV. Спасибо.

+0

Сравнение изображений для сходства нетривиально. Какие изображения вы сравниваете и как они связаны? –

+0

http://stackoverflow.com/questions/2644787/precisely-compare-2-images-for-differences-using-opencv – karlphillip

+0

http://stackoverflow.com/questions/4550458/opencv-compare-two-images-and -get-different-pixels – karlphillip

ответ

2

Гистограмма просто убедитесь, что оба изображения имеют одинаковые цветовые распределения. Распределения цветов могут быть похожими на очень разные изображения.

Например, представьте себе черно-белую 8x8-контрольную панель и изображение, левая сторона которого черная, а сторона бега чистое. Эти изображения имеют одну и ту же гистограмму.

0

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

0

Для каждого изображения вычислить 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); 

Вы можете увеличить точность путем деления изображения на более мелкие участки и среднее значение на основании Результаты.

Смежные вопросы