Opencv 直方图比较
#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;
}

Opencv 直方图比较的更多相关文章
- openCV 直方图统计
直方图显示 #include <opencv2/opencv.hpp> using namespace std; using namespace cv; int main(int argc ...
- OPENCV直方图与匹配
直方图可以用来描述不同的参数和事物,如物体的色彩分布,物体的边缘梯度模版以及目标位置的当前假设的概率分布. 直方图就是对数据进行统计的一种方法,并且将统计值定义到一系列定义好的bin(组距)中,获得一 ...
- OpenCV——直方图均衡化(用于图像增强)
#include <opencv2/opencv.hpp> #include <iostream> #include <math.h> using namespac ...
- opencv:直方图操作
示例程序: #include <opencv.hpp> using namespace cv; using namespace std; int main() { Mat src, dst ...
- opencv直方图该怎么画
图像直方图是反映图像中像素分布特性的统计表,一般显示如下: 其中横坐标代表的是图像像素的种类,或者说是灰度级,纵坐标代表的是每一级灰度下像素数或者该灰度级下像素数在所有图像总像素数总所占的百分比. 直 ...
- OpenCV直方图(直方图、直方图均衡,直方图匹配,原理、实现)
1 直方图 灰度级范围为 \([0,L-1]\) 的数字图像的直方图是离散函数 \(h(r_k) = n_k\) , 其中 \(r_k\) 是第\(k\)级灰度值,\(n_k\) 是图像中灰度为 \( ...
- opencv 直方图
1.简介 对输入图像进行直方图均衡化处理,提升后续对象检测的准确率在OpenCV人脸检测的代码演示中已经很常见.此外对医学影像图像与卫星遥感图像也经常通过直方图均衡化来提升图像质量. 图像直方图均衡化 ...
- opencv直方图均衡化
#include <iostream> #include "highgui.h" #include "cv.h" #include "cx ...
- opencv直方图拉伸
1.首先计算出一幅图像的直方图 //计算直方图 cv::MatND ImageHist::getHist(const cv::Mat &image){ cv::Mat im; if(image ...
随机推荐
- [LeetCode系列]最大连续子列递归求解分析
本文部分参考Discuss: LeetCode. 步骤1. 选择数组的中间元素. 最大子序列有两种可能: 包含此元素/不包含. 步骤2. 步骤2.1 如果最大子序列不包含中间元素, 就对左右子序列进行 ...
- 如何将angular-ui-bootstrap的图片轮播组件封装成一个指令
在项目开发中我们经常会遇到图片轮播的功能点: 如果我们开发人员自己原生手写,将会花费很多的时间,最终得不偿失. 接下来就详细说说如何使用angular-ui发热图片轮播模块,并且将它写成一个指令(便于 ...
- java bean 合并
package com.hainabo.mgcmall.util; import java.beans.BeanInfo;import java.beans.Introspector;import j ...
- postman请求ajax失败的解决方法
第一步,把要提交的数据放到Body里 第二步:去掉请求头的Content-Length字段
- Java Web不能不懂的知识
1.传说中java的class文件可以一次编译到处运行,那么源代码采用GBK还是UTF-8会有影响么? 不会有影响. 因为Java源代码通过编译后,生成的class文件为字节码.它可以被看作是包含一个 ...
- 015:索引、B+树
一. 索引 1. 索引的定义 索引是一种单独的.物理的对数据库表中一列或多列的值进行排序的一种存储结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单.索引的作用 ...
- (转) C#中Timer使用及解决重入(多线程同时调用callback函数)问题
原文链接: http://www.cnblogs.com/hdkn235/archive/2014/12/27/4187925.html
- 关于调整TimePicker, DatePicker的大小,样式
最近在做一个时间选择器,想把要DatePicker和TimePicker放在一起使用,无赖他们的大小样式是被Google写死了,找不到相应的属性来设置,自己花了点时间写了一个使用的Demo,运行的效果 ...
- 10g RAC常用开启关闭命令 – SRVCTL用法
10G RAC: srvctl 1. Grammar: srvctl <command> <object> [<options]] available <comma ...
- 记一则css3计算
.Head{ background-image: url("../../Img/PersonalCenter/banner.png"); background-repeat: no ...