青岛建设局网站首页,网站建设企业熊掌号,国产成年做视频网站,网站开发需要证书吗操作系统#xff1a;ubuntu22.04 OpenCV版本#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言#xff1a;C11
算法描述
比较两个直方图。
函数 cv::compareHist 使用指定的方法比较两个密集或两个稀疏直方图。 该函数返回 d ( H 1 , H 2 ) d(H_1, H_2) d(H1,H2… 操作系统ubuntu22.04 OpenCV版本OpenCV4.9 IDE:Visual Studio Code 编程语言C11
算法描述
比较两个直方图。
函数 cv::compareHist 使用指定的方法比较两个密集或两个稀疏直方图。 该函数返回 d ( H 1 , H 2 ) d(H_1, H_2) d(H1,H2) 虽然该函数在处理一维、二维或三维的密集直方图时效果很好但它可能不适合高维的稀疏直方图。在这样的直方图中由于别名aliasing和采样问题非零直方图bin的坐标可能会略微偏移。为了比较这样的直方图或更一般的加权点的稀疏配置可以考虑使用 EMD 函数。
compareHist 是 OpenCV 中用于比较两个直方图相似性的函数。这个函数可以用来衡量两个直方图之间的差异或相似程度常用于图像处理和计算机视觉任务中比如图像检索、图像匹配或特征比较等。
函数原型1
ouble cv::compareHist
(InputArray H1,InputArray H2,int method
)
参数1
参数H1 第一个被比较的直方图。参数H2 第二个被比较的直方图与 H1 具有相同的尺寸。参数method 比较方法参见 HistCompMethods。
函数原型2
这是一个重载的成员函数为了方便而提供。它与上述函数的不同之处仅在于它接受的参数。
double cv::compareHist
(const SparseMat H1,const SparseMat H2,int method
)
代码示例 #include iostream
#include opencv2/opencv.hppint main()
{// 加载两幅图像cv::Mat image1 cv::imread( /media/dingxin/data/study/OpenCV/sources/images/qiu.jpg, cv::IMREAD_GRAYSCALE );cv::Mat image2 cv::imread( /media/dingxin/data/study/OpenCV/sources/images/qiu2.png, cv::IMREAD_GRAYSCALE );if ( image1.empty() || image2.empty() ){std::cerr Error: Images not found or unable to read. std::endl;return -1;}// 计算两个图像的直方图int histSize 256;float range[] { 0, 256 };const float* histRange { range };bool uniform true;bool accumulate false;cv::Mat hist1, hist2;calcHist( image1, 1, 0, cv::Mat(), hist1, 1, histSize, histRange, uniform, accumulate );calcHist( image2, 1, 0, cv::Mat(), hist2, 1, histSize, histRange, uniform, accumulate );// 归一化直方图cv::normalize( hist1, hist1, 0, 1, cv::NORM_MINMAX, -1, cv::Mat() );cv::normalize( hist2, hist2, 0, 1, cv::NORM_MINMAX, -1, cv::Mat() );// 比较两个直方图double result_correlation compareHist( hist1, hist2, cv::HISTCMP_CORREL );double result_chisqr compareHist( hist1, hist2, cv::HISTCMP_CHISQR );double result_intersect compareHist( hist1, hist2, cv::HISTCMP_INTERSECT );double result_bhattacharyya compareHist( hist1, hist2, cv::HISTCMP_BHATTACHARYYA );std::cout Correlation: result_correlation std::endl;std::cout Chi-Squared: result_chisqr std::endl;std::cout Intersection: result_intersect std::endl;std::cout Bhattacharyya Distance: result_bhattacharyya std::endl;return 0;
}运行结果 输出结果解释 Correlation (相关性) 含义相关性比较方法衡量两个直方图之间的线性关系。值范围通常在 -1 到 1 之间。结果result_correlation 表示两个直方图的相关性得分。解释如果结果接近 1则表示两个直方图高度相关如果接近 0则表示没有相关性如果接近 -1则表示负相关。 Chi-Squared (卡方) 含义卡方比较方法衡量两个直方图之间的差异。值范围通常是非负数。结果result_chisqr 表示两个直方图的卡方得分。解释如果结果接近 0则表示两个直方图非常相似如果结果较大则表示两个直方图差异较大。 Intersection (交集) 含义交集比较方法衡量两个直方图的交集部分。值范围通常在 0 到 1 之间。结果result_intersect 表示两个直方图的交集得分。解释如果结果接近 1则表示两个直方图高度重合如果接近 0则表示几乎没有重合。 Bhattacharyya Distance (巴塔查里雅距离) 含义巴塔查里雅距离衡量两个概率分布之间的相似性。值范围通常是非负数。结果result_bhattacharyya 表示两个直方图的巴塔查里雅距离。解释如果结果接近 0则表示两个直方图非常相似如果结果较大则表示两个直方图差异较大。