#include "opencv/cv.hpp"
#include "opencv2/objdetect/objdetect.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp" #include <iostream>
#include <stdio.h> using namespace std;
using namespace cv; String cascadeName = "D:\\OpenCV-2.4.2\\data\\haarcascades\\haarcascade_frontalface_alt.xml"; IplImage* cutImage(IplImage* src, CvRect rect) {
cvSetImageROI(src, rect);
IplImage* dst = cvCreateImage(cvSize(rect.width, rect.height),
src->depth,
src->nChannels); cvCopy(src,dst,0);
cvResetImageROI(src);
return dst;
} IplImage* detect( Mat& img, CascadeClassifier& cascade, double scale)
{
int i = 0;
double t = 0;
vector<Rect> faces;
Mat gray, smallImg( cvRound (img.rows/scale), cvRound(img.cols/scale), CV_8UC1 ); cvtColor( img, gray, CV_BGR2GRAY );
resize( gray, smallImg, smallImg.size(), 0, 0, INTER_LINEAR );
equalizeHist( smallImg, smallImg ); t = (double)cvGetTickCount();
cascade.detectMultiScale( smallImg, faces,
1.3, 2, CV_HAAR_SCALE_IMAGE,
Size(30, 30) );
t = (double)cvGetTickCount() - t;
printf( "detection time = %g ms\n", t/((double)cvGetTickFrequency()*1000.) );
for( vector<Rect>::const_iterator r = faces.begin(); r != faces.end(); r++, i++ )
{
IplImage* temp = cutImage(&(IplImage(img)), cvRect(r->x, r->y, r->width, r->height));
return temp;
} return NULL;
}
//画直方图用
int HistogramBins = 256;
float HistogramRange1[2]={0,255};
float *HistogramRange[1]={&HistogramRange1[0]};
int CompareHist(IplImage* image1, IplImage* image2)
{
IplImage* srcImage;
IplImage* targetImage;
if (image1->nChannels != 1) {
srcImage = cvCreateImage(cvSize(image1->width, image1->height), image1->depth, 1);
cvCvtColor(image1, srcImage, CV_BGR2GRAY);
} else {
srcImage = image1;
} if (image2->nChannels != 1) {
targetImage = cvCreateImage(cvSize(image2->width, image2->height), srcImage->depth, 1);
cvCvtColor(image2, targetImage, CV_BGR2GRAY);
} else {
targetImage = image2;
} CvHistogram *Histogram1 = cvCreateHist(1, &HistogramBins, CV_HIST_ARRAY,HistogramRange);
CvHistogram *Histogram2 = cvCreateHist(1, &HistogramBins, CV_HIST_ARRAY,HistogramRange); cvCalcHist(&srcImage, Histogram1);
cvCalcHist(&targetImage, Histogram2); cvNormalizeHist(Histogram1, 1);
cvNormalizeHist(Histogram2, 1); // CV_COMP_CHISQR,CV_COMP_BHATTACHARYYA这两种都可以用来做直方图的比较,值越小,说明图形越相似
printf("CV_COMP_CHISQR : %.4f\n", cvCompareHist(Histogram1, Histogram2, CV_COMP_CHISQR));
printf("CV_COMP_BHATTACHARYYA : %.4f\n", cvCompareHist(Histogram1, Histogram2, CV_COMP_BHATTACHARYYA)); // CV_COMP_CORREL, CV_COMP_INTERSECT这两种直方图的比较,值越大,说明图形越相似
printf("CV_COMP_CORREL : %.4f\n", cvCompareHist(Histogram1, Histogram2, CV_COMP_CORREL));
printf("CV_COMP_INTERSECT : %.4f\n", cvCompareHist(Histogram1, Histogram2, CV_COMP_INTERSECT)); cvReleaseHist(&Histogram1);
cvReleaseHist(&Histogram2);
if (image1->nChannels != 1) {
cvReleaseImage(&srcImage);
}
if (image2->nChannels != 1) {
cvReleaseImage(&targetImage);
}
return 0;
}
String srcImage = "d:\\ldh1.jpg";
String targetImage = "d:\\ldh5.jpg";
int main(int argc, char* argv[])
{
CascadeClassifier cascade;
namedWindow("image1");
namedWindow("image2");
if( !cascade.load( cascadeName ) )
{
return -1;
} Mat srcImg, targetImg;
IplImage* faceImage1;
IplImage* faceImage2;
srcImg = imread(srcImage);
targetImg = imread(targetImage);
faceImage1 = detect(srcImg, cascade, 1);
if (faceImage1 == NULL) {
return -1;
}
// cvSaveImage("d:\\face.jpg", faceImage1, 0);
faceImage2 = detect(targetImg, cascade, 1);
if (faceImage2 == NULL) {
return -1;
}
// cvSaveImage("d:\\face1.jpg", faceImage2, 0);
imshow("image1", Mat(faceImage1));
imshow("image2", Mat(faceImage2)); CompareHist(faceImage1, faceImage2);
cvWaitKey(0);
cvReleaseImage(&faceImage1);
cvReleaseImage(&faceImage2);
return 0;
}

  

CV做直方图的比较说明图形越相似性的更多相关文章

  1. python对web服务器做压力测试并做出图形直观显示

    压力测试有很多工具啊.apache的,还有jmeter, 还有loadrunner,都比较常用. 其实你自己用python写的,也足够用. 压力测试过程中要统计时间. 比如每秒的并发数,每秒的最大响应 ...

  2. 【ichartjs】用ichartjs替代Excel做直方图

    在 http://www.cnblogs.com/xiandedanteng/p/8717506.html 一文中,最后是用Excel作图,现在用ichartjs替代之. 效果如下: 文件下载: ht ...

  3. opencv学习之路(20)、直方图应用

    一.直方图均衡化--equalizeHist() #include "opencv2/opencv.hpp" using namespace cv; void main() { 6 ...

  4. opencv python:图像直方图 histogram

    直接用matplotlib画出直方图 def plot_demo(image): plt.hist(image.ravel(), 256, [0, 256]) # image.ravel()将图像展开 ...

  5. Cocoa Drawing Guide学习part1——基础和图形上下文 (转)

    原文:http://noark9.github.io/2013/12/28/cocoa-drawing-guide-study-part-1/ 简介 cocoa drawing由AppKit提供并且也 ...

  6. Oracle 直方图理论

    一.何为直方图 直方图是一种几何形图表,它是根据从生产过程中收集来的质量数据分布情况,画成以组距为底边.以频数为高度的一系列连接起来的直方型矩形图,如图所示 二.ORACLE 直方图 在Oracle中 ...

  7. opencv2对于读书笔记——背投影图像的直方图来检测待处理的内容

    一些小的概念 1.直方图是图像内容的一个重要特性. 2.假设一幅图像的区域中显示的是一种独特的纹理或是一个独特的物体,那么这个区域的直方图能够看作是一个概率函数,它给出的是某个像素属于该纹理或物体的概 ...

  8. OpenCV绘制图像中RGB三个通道的直方图

    一开始是看<OpenCV计算机视觉编程攻略(第2版)>这本书学做直方图,但是书本里说直方图的部分只详细说了黑白图像(单通道)的直方图绘制方法,RGB图像的直方图只说了如何计算,没有说计算完 ...

  9. Python+OpenCV图像处理(八)—— 图像直方图

    直方图简介:图像的直方图是用来表现图像中亮度分布的直方图,给出的是图像中某个亮度或者某个范围亮度下共有几个像素.还不明白?就是统计一幅图某个亮度像素数量.比如对于灰度值12,一幅图里面有2000 个像 ...

随机推荐

  1. 宽度设置百分比 高度跟宽度一样css解决方案

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. Noip2016day2 组合数问题problem

    题目描述 组合数表示的是从n个物品中选出m个物品的方案数.举个例子,从(1,2,3) 三个物品中选择两个物品可以有(1,2),(1,3),(2,3)这三种选择方法.根据组合数的定 义,我们可以给出计算 ...

  3. maven工程运行出Unable to compile class for JSP: 错误

    使用mvn tomcat:run运行时出现500错误,使用tomcat7再次运行就好了 更新,上面的是在命令行操作的 如果要在idea上面出现错误的话需要在pom.xml上配置下面的语句 org.ap ...

  4. maven 参考

    系列文章,通俗易懂,可以看看 http://www.cnblogs.com/AlanLee/category/918828.html

  5. Exception inside CORBA when accessing a remote bean

    http://stackoverflow.com/questions/23291520/exception-inside-corba-when-accessing-a-remote-bean

  6. centOS7.5上部署server jre1.8.0_192 tomcat-8.5.35 mysql-8.0.13

  7. linux查看系统版本(适用于centos、ubutun,其他类型没有进行测试)

    方法一:cat /etc/issue 或more /etc/issue root@salt-master:~# cat /etc/issueUbuntu 16.04.2 LTS \n \l 方法二:l ...

  8. MySQL库相关操作

    ========MySQL库相关操作====== 一.系统数据库 information_schema: 虚拟库,不占用磁盘空间,存储的是数据库启动后的一些参数,如用户表信息.列信息.权限信息.字符信 ...

  9. Python随笔---return与print,全局变量与局部变量

    Return是指返回一个数值,一般在函数中应用较多 Print则是指把结果打印出来,显示在屏幕上 def sum(a,b): total=a+b print('函数内:',total) return ...

  10. git忽略已经被提交的文件

    git忽略已经被提交的文件 git rm --cached logs/xx.log 然后更新 .gitignore 忽略掉目标文件, 最后 git commit -m "We really ...