【问题标题】:results compareHist in openCV结果比较openCV中的Hist
【发布时间】:2012-03-13 15:43:24
【问题描述】:

我正在尝试比较存储为数组的两个直方图。我是 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 中吗?还是我选择了错误的直方图“设置”?

【问题讨论】:

    标签: c++ opencv histogram


    【解决方案1】:

    问题是您将 c 整数数组转换为字符矩阵的前 4 行。构造函数假定一个 char 数组,因此无法正确读取值。您的矩阵 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-29
      • 2011-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多