网站免费建站pixiv app,推动品牌建设的网站,用网站做宣传的费用,个人网站建设的参考文献小白导读学习计算机视觉最重要的能力应该就是编程了#xff0c;为了帮助小伙伴尽快入门计算机视觉#xff0c;小白准备了【OpenCV入门】系列。新的一年文章的内容进行了很大的完善#xff0c;主要是借鉴了更多大神的文章#xff0c;希望让小伙伴更加容易理解。如果小伙伴觉… 小白导读学习计算机视觉最重要的能力应该就是编程了为了帮助小伙伴尽快入门计算机视觉小白准备了【OpenCV入门】系列。新的一年文章的内容进行了很大的完善主要是借鉴了更多大神的文章希望让小伙伴更加容易理解。如果小伙伴觉得有帮助请点击一下文末的“好看”鼓励一下小白。直方图比较方法-概述对输入的两张图像计算得到直方图H1与H2归一化到相同的尺度空间然后可以通过计算H1与H2的之间的距离得到两个直方图的相似程度进而比较图像本身的相似程度。Opencv提供的比较方法有四种Correlation 相关性比较 -计算结果范围为 -1到1 -1很不相关1完全一样 Chi-Square 卡方比较 -计算结果越接近0两个直方图越相似Intersection 十字交叉性 -计算公式为取两个直方图每个相同位置的值的最小值然后求和这个比较方式不是很好不建议使用Bhattacharyya distance 巴氏距离 - 比较结果是很准的计算结果范围为 0-1 0表示两个直方图非常相关1最不相似1直方图比较方法-相关性计算(CV_COMP_CORREL)计算结果范围为 -1到1 -1很不相关1完全一样2直方图比较方法-卡方计算(CV_COMP_CHISQR)计算结果越接近0两个直方图越相似H1,H2分别表示两个图像的直方图数据3直方图比较方法-十字计算(CV_COMP_INTERSECT)计算公式为取两个直方图每个相同位置的值的最小值然后求和这个比较方式不是很好不建议使用H1,H2分别表示两个图像的直方图数据4直方图比较方法-巴氏距离计算(CV_COMP_BHATTACHARYYA)比较结果是很准的计算结果范围为 0-1 0表示两个直方图非常相关1最不相似H1,H2分别表示两个图像的直方图数据函数介绍首先把图像从RGB色彩空间转换到HSV色彩空间cvtColor计算图像的直方图然后归一化到[0~1]之间calcHist和normalize;使用上述四种比较方法之一进行比较compareHistcv::compareHist(InputArray h1, // 直方图数据下同InputArray H2,int method// 比较方法上述四种方法之一)程序步骤#include #include #include using namespace std;using namespace cv;string convertToString(double d);int main(int argc, char** argv) { // 1. 声明储存基准图像和另外两张对比图像的矩阵( RGB 和 HSV ) Mat base, test1, test2; Mat hsvbase, hsvtest1, hsvtest2; // 2. 装载基准图像(src_base) 和两张测试图像: base imread(E:/Experiment/OpenCV/Pictures/lenanoise.jpg); if (!base.data) { printf(could not load image...\n); return -1; } test1 imread(E:/Experiment/OpenCV/Pictures/lena.jpg); test2 imread(E:/Experiment/OpenCV/Pictures/lena1.jpg); // 3. 将图像转化到HSV格式: cvtColor(base, hsvbase, CV_BGR2HSV);//转换为 HSV 颜色空间也是3通道 cvtColor(test1, hsvtest1, CV_BGR2HSV); cvtColor(test2, hsvtest2, CV_BGR2HSV); // 4. 初始化计算直方图需要的实参(bins, 范围通道 H 和 S ). int h_bins 50; int s_bins 60; int histSize[] { h_bins, s_bins }; // hue varies from 0 to 179, saturation from 0 to 255 float h_ranges[] { 0, 180 }; float s_ranges[] { 0, 256 }; const float* ranges[] { h_ranges, s_ranges }; // Use the o-th and 1-st channels int channels[] { 0, 1 }; // 5. 创建储存直方图的 MatND 实例: //ND 表示二维或多维的Mat typedef Mat MatND; 源码中MatND的声明。 Mat表示二维的数组 MatND hist_base; MatND hist_test1; MatND hist_test2; // 6. 计算基准图像两张测试图像 calcHist(hsvbase, 1, channels, Mat(), hist_base, 2, histSize, ranges, true, false); normalize(hist_base, hist_base, 0, 1, NORM_MINMAX, -1, Mat());//归一化到 0-1 之间 calcHist(hsvtest1, 1, channels, Mat(), hist_test1, 2, histSize, ranges, true, false); normalize(hist_test1, hist_test1, 0, 1, NORM_MINMAX, -1, Mat()); calcHist(hsvtest2, 1, channels, Mat(), hist_test2, 2, histSize, ranges, true, false); normalize(hist_test2, hist_test2, 0, 1, NORM_MINMAX, -1, Mat()); // 7. 使用4种对比标准将基准图像(hist_base)的直方图与其余各直方图进行对比: //比较的算法 CV_COMP_CORREL CHISQR INTERSECT BHATTACHARYYA double basebase compareHist(hist_base, hist_base, CV_COMP_CORREL); double basetest1 compareHist(hist_base, hist_test1, CV_COMP_CORREL); double basetest2 compareHist(hist_base, hist_test2, CV_COMP_CORREL); double tes1test2 compareHist(hist_test1, hist_test2, CV_COMP_CORREL); printf(test1 compare with test2 correlation value :%f, tes1test2); Mat test12; test2.copyTo(test12); // 8. 将比较的结果转换为string然后以文字的方式绘制到图形上 putText(base, convertToString(basebase), Point(50, 50), CV_FONT_HERSHEY_COMPLEX, 1, Scalar(0, 0, 255), 2, LINE_AA); putText(test1, convertToString(basetest1), Point(50, 50), CV_FONT_HERSHEY_COMPLEX, 1, Scalar(0, 0, 255), 2, LINE_AA); putText(test2, convertToString(basetest2), Point(50, 50), CV_FONT_HERSHEY_COMPLEX, 1, Scalar(0, 0, 255), 2, LINE_AA); putText(test12, convertToString(tes1test2), Point(50, 50), CV_FONT_HERSHEY_COMPLEX, 1, Scalar(0, 0, 255), 2, LINE_AA); namedWindow(base, CV_WINDOW_AUTOSIZE); namedWindow(test1, CV_WINDOW_AUTOSIZE); namedWindow(test2, CV_WINDOW_AUTOSIZE); imshow(base, base); imshow(test1, test1); imshow(test2, test2); imshow(test12, test12); waitKey(0); return 0;}string convertToString(double d) { ostringstream os; if (os d) // 运算符重载了将double转成string return os.str(); return invalid conversion;}运行截图主要借鉴”Madcola“和”Micheal超“两位大神的文章。两位大神的博客主页是https://www.cnblogs.com/skyfsm/(Madcola)https://blog.csdn.net/qq_42887760(Micheal超)结束语由于时间和文章篇幅有限本次总结先到这里下次小白会为小伙伴们带来OpenCV的感兴趣区域ROI和logo添加技术各位小伙伴敬请期待。如果小伙伴觉得本文对自己有帮助请帮忙点击一下右下角的“好看”鼓励一下小白。往期文章一览1、西游记竟然是一个有关计算机网络协议的故事2、【生日送书】3、基于单目视觉的三维重建算法综述4、那些简历造假拿offer的程序员后来都怎么样了5、隔壁实验室同学实习得到了offer我要不要也出去实习6、【走进OpenCV】滤波代码原来这么写7、【走进OpenCV】这样腐蚀下来让我膨胀8、视觉SLAM综述9、清华大学智能机器人研究报告【概述篇】10、清华大学智能机器人研究报告【技术篇】你点的每个好看我都认真当成了喜欢