#include <iostream>
#include <opencv2/opencv.hpp>

using namespace std;
using namespace cv;

Mat img1, img2, img3, img_result, img_gray1, img_gray2, img_gray3, img_hsv1,img_hsv2,img_hsv3;
MatND img_hist1,img_hist2,img_hist3;

char win1[] = "window1";
char win2[] = "window2";
char win3[] = "window3";
char win4[] = "window4";
char win5[] = "window5";

int threshold_value = 0;
int max_value = 255;
RNG rng(12345);

int Demo_Histogram_Compare();
string convertToString(double d);

int index = 0;

//Remap
int Demo_Histogram_Compare()
{
  img1 = imread("D://images//lion-1.jpg");
  img2 = imread("D://images//lion-4.jpg");
  img3 = imread("D://images//lion-5.jpg");
  if (img1.empty())
  {
    cout << "could not load image..." << endl;
    return 0;
  }
  //imshow(win1, img1);

  cvtColor(img1,img_hsv1,CV_BGR2HSV);
  cvtColor(img2, img_hsv2, CV_BGR2HSV);
  cvtColor(img3, img_hsv3, CV_BGR2HSV);

  int h_bins = 10;
  int s_bins = 12;
  int histSize[] = {h_bins,s_bins};
  float h_ranges[] = {0,180};
  float s_ranges[] = {0,256};

  const float *ranges[] = {h_ranges,s_ranges};
  int channels[] = {0,1};

  calcHist(&img_hsv1, 1, channels, Mat(), img_hist1, 2, histSize, ranges, true, false);
  normalize(img_hist1, img_hist1, 0, 1, NORM_MINMAX, -1, Mat());

  calcHist(&img_hsv2, 1, channels, Mat(), img_hist2, 2, histSize, ranges, true, false);
  normalize(img_hist2, img_hist2, 0, 1, NORM_MINMAX, -1, Mat());

  calcHist(&img_hsv3, 1, channels, Mat(), img_hist3, 2, histSize, ranges, true, false);
  normalize(img_hist3, img_hist3, 0, 1, NORM_MINMAX, -1, Mat());

  double img_1_c_1 = compareHist(img_hist1, img_hist1, CV_COMP_INTERSECT);
  double img_1_c_2 = compareHist(img_hist1, img_hist2, CV_COMP_INTERSECT);
  double img_1_c_3 = compareHist(img_hist1, img_hist3, CV_COMP_INTERSECT);
  double img_2_c_3 = compareHist(img_hist2, img_hist3, CV_COMP_INTERSECT);

  img2.copyTo(img_result);
  putText(img1, convertToString(img_1_c_1), Point(50, 50), CV_FONT_HERSHEY_COMPLEX, 1, Scalar(0, 0, 255), 2, LINE_AA);
  putText(img2, convertToString(img_1_c_2), Point(50, 50), CV_FONT_HERSHEY_COMPLEX, 1, Scalar(0, 0, 255), 2, LINE_AA);
  putText(img3, convertToString(img_1_c_3), Point(50, 50), CV_FONT_HERSHEY_COMPLEX, 1, Scalar(0, 0, 255), 2, LINE_AA);
  putText(img_result, convertToString(img_2_c_3), Point(50, 50), CV_FONT_HERSHEY_COMPLEX, 1, Scalar(0, 0, 255), 2, LINE_AA);

  imshow(win1,img1);
  imshow(win2,img2);
  imshow(win3,img3);
  imshow(win4, img_result);
  return 0;
}

string convertToString(double d)
{
  ostringstream os;
  if (os<<d)
  {
    return os.str();
  }
  return "Invalid conversion...";
}

int main()
{
  Demo_Histogram_Compare();

  waitKey(0);
  return 0;
}

最新文章

  1. ANSI Common Lisp Practice - My Answers - Chatper - 3
  2. Selenium 功能总结大集合
  3. C#使用Process调用批处理阻塞问题
  4. OS X下安装Redis及配置开机启动
  5. 制作OS X 10.10.3启动安装U盘
  6. 实例介绍Cocos2d-x开关菜单
  7. linux shell pushd popd dirs命令
  8. 帝国cms &lt;!--list.var1--&gt;产生不同样式
  9. string和byte[]的转换 (C#)
  10. PLECS—模型仿真——第十一周作业
  11. mysql中的union用法以及子查询综合应用
  12. 每日分享!介绍Css 盒模型!
  13. 如何用Ant Design Pro框架做项目省力
  14. CSS| 框模型-定位及相關屬性
  15. VS Code Html Zen coding
  16. 框架frame
  17. confirm(&quot;确定要删除吗?&quot;) _详解
  18. &lt;转载&gt; js 闭包
  19. windows installer 应用变换时的错误.请验证指定的变换路径是否有
  20. centos7下创建mysql5.6多实例

热门文章

  1. java的try-with-resource机制
  2. Linux服务器运维安全策略经验分享
  3. RK3288 error: undefined reference to &#39;LOGD&#39;
  4. jsp中取两位小数
  5. 阿里云视频点播 php开发
  6. linux下踢出已登录用户
  7. 关于不同应用程序存储IO类型的描述
  8. 小峰Hibernate简介与HelloWorld
  9. Linux中常用的查找文件的命令
  10. 第十一章 Helm-kubernetes的包管理器(下)