сравнить результаты в OpenCV - PullRequest
1 голос
/ 13 марта 2012

Я пытаюсь сравнить две гистограммы, которые я сохранил в виде массива.Я новичок в интерфейсе c ++ (cv :: Mat) и вычислении гистограмм в OpenCV.

Мой код:

int testArr1[4] = {12, 10, 11, 11};
int testArr2[4] = {12, 0, 11, 0};
cv::Mat M1 = cv::Mat(1,4,CV_8UC1, testArr1);
cv::Mat M2 = cv::Mat(1,4,CV_8UC1, testArr2);

int histSize = 4;
float range[] = {0, 20};
const float* histRange = {range};
bool uniform = true;
bool accumulate = false;
cv::Mat a1_hist, a2_hist;

cv::calcHist(&M1, 1, 0, cv::Mat(), a1_hist, 1, &histSize, &histRange, uniform, accumulate );
cv::calcHist(&M2, 1, 0, cv::Mat(), a2_hist, 1, &histSize, &histRange, uniform, accumulate );

double compar_c = cv::compareHist(a1_hist, a2_hist, CV_COMP_CORREL);
double compar_chi = cv::compareHist(a1_hist, a2_hist, CV_COMP_CHISQR);
double compar_bh = cv::compareHist(a1_hist, a2_hist, CV_COMP_BHATTACHARYYA);
double compar_i = cv::compareHist(a1_hist, a2_hist, CV_COMP_INTERSECT);
cout << "compare(CV_COMP_CORREL): " << compar_c << "\n";
cout << "compare(CV_COMP_CHISQR): " << compar_chi << "\n";
cout << "compare(CV_COMP_BHATTACHARYYA): " << compar_bh << "\n";
cout << "compare(CV_COMP_INTERSECT): " << compar_i << "\n";

Результаты немного неожиданны:

compare(CV_COMP_CORREL): 1
compare(CV_COMP_CHISQR): 0
compare(CV_COMP_BHATTACHARYYA): 0
compare(CV_COMP_INTERSECT): 4

Для пересечения, например, я ожидал что-то вроде 0,5.Что я делаю неправильно?Могу ли я не помещать массивы в cv :: mat?Или я неправильно выбрал гистограмму "Настройки"?

1 Ответ

1 голос
/ 13 марта 2012

Проблема в ваших первых 4 строках, где вы конвертируете массив целых чисел в матрицу символов. Конструктор принимает массив символов и поэтому не может правильно читать значения. Ваши матрицы M1 и M2 не содержат правильных значений.

Но если вы измените следующие строки, чтобы тип массива соответствовал типу матрицы:

char testArr1[4] = {12, 10, 11, 11};
char testArr2[4] = {12, 0, 11, 0};

Я получаю следующий вывод из вашей программы:

compare(CV_COMP_CORREL): 0.57735
compare(CV_COMP_CHISQR): 2.66667
compare(CV_COMP_BHATTACHARYYA): 0.541196
compare(CV_COMP_INTERSECT): 2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...