在F盘生成了一个文件名称为“文件夹”的文本文件。

第一步:批处理提取图像的一维颜色直方图,并保存到.xml中的featureHists

第一个參数:图像的路径

第二个參数:保存的.xml

#include<iostream>
#include<fstream>
#include<string>
using namespace std; #include<opencv2\imgproc\imgproc.hpp>
#include<opencv2\core\core.hpp>
#include<opencv2\highgui\highgui.hpp>
using namespace cv; //计算一维直方图特征
Mat hist1d(const Mat& src); int main(int argc,char* argv[])
{
    if(argc !=3)
    {
        cerr << "Wrong Argument !" <<endl;
        return -1;
    }
    //定义文件流,仅仅能读取
    ifstream inPutFile(argv[1],ios::in);
    if(! inPutFile)
    {
        cerr << "File Open Erro !" <<endl;
        return -1;
    }
    //读取文件流中的每一行,并赋值给fileName。读取每一幅图像并显示
    string fileName ;
    Mat image;
    Mat featureHist;
    Mat featureHists;
    while (getline(inPutFile,fileName))
    {
        
        image = imread(fileName,1);
        //计算一维直方图特征
        featureHist = hist1d(image);
        //按行存储每一幅图像的一维直方图特征
        featureHists.push_back(featureHist);
    }
    //注意一定要记得关闭文件流
    inPutFile.close();     /*第五步。把图像特征保存到.xml文件里*/
    FileStorage fs(argv[2],FileStorage::WRITE);
    fs<<"featureHists"<<featureHists;
    fs.release();
    
    return 0;
} Mat hist1d(const Mat& src)
{
    Mat hsv;     //颜色空间的转换 BGR2HSV
    cvtColor(src,hsv,CV_BGR2HSV);     //把H通道分为60个bin
    int hbins = 60;
    int histSize[] = { hbins };     //H的取值范围 0-179
    float hranges[]= {0,180};
    const float* ranges [] ={hranges};     Mat hist1D,histRow,histRowDst;
    //我们依据图像的第一通道。计算一维直方图,并且输出的hist1D为32F
    int channels [] ={0};
    calcHist(&hsv,1,channels,Mat(),hist1D,1,histSize,ranges,true,false);
    //把直方图特征按一行来存储
    histRow=hist1D.reshape(1,1);     //把直方图归一化
    normalize(histRow,histRowDst,1,0,NORM_L1);     return histRowDst;
}

编译完毕后,进入命令行

然后,在F盘出现了一个features的.xml文件。里边存储了上述图像一维直方图特征。

—————————————————————————————————————————————————————————————————————————————

第二步:提取色卡的一维颜色直方图

#include<iostream>
#include<string>
using namespace std; #include<opencv2\core\core.hpp>
#include<opencv2\highgui\highgui.hpp>
#include<opencv2\imgproc\imgproc.hpp>
using namespace cv; int main(int argc,char* argv[])
{
Mat src = imread(argv[1],1);
if(! src.data)
{
cout <<"No Image" << endl;
return -1;
} Mat hsv;
//颜色空间的转换BGR2HSV
cvtColor(src,hsv,CV_BGR2HSV); //把H通道分为60个bin
int hbins = 60;
int histSize[] = { hbins }; //H的取值范围 0-179
float hranges[]= {0,180}; const float* ranges [] ={hranges};
Mat hist1D,histRow,histRowDst;
//我们依据图像的第一通道,计算一维直方图,并且输出的hist1D为32F
int channels [] ={0};
calcHist(&hsv,1,channels,Mat(),hist1D,1,histSize,ranges,true,false);
//把直方图特征按一行来存储
histRow=hist1D.reshape(1,1); //把直方图归一化
normalize(histRow,histRowDst,1,0,NORM_L1);
FileStorage fs(argv[2],FileStorage::WRITE);
//把histRowDst保存到.xml文件里
fs << argv[3] << histRowDst;
fs.release();
return 0;
}

分别各自提取他们的一维颜色直方图

然后,在F盘出现了四个.xml文件,分别存放了他们的颜色直方图信息

____________________________________________________________________________________________________________________________________

第三步:利用颜色卡的颜色直方图检索图像的颜色直方图

图像检索:一维直方图+欧几里得距离+flann+KNN的更多相关文章

  1. 图像检索:一维直方图+EMD距离

    EMD距离具体介绍已经在在这里已经给出. 思路:我们把一张图像的归一化的一维直方图作为signature的权值,也就是一般在比較两幅图像颜色直方图的EMD距离时,每一行的坐标一样,仅仅是权重值不一样. ...

  2. 图像检索:RGBHistogram+欧几里得距离|卡方距离

    RGBHistogram: 分别计算把彩色图像的三个通道R.G.B的一维直方图,然后把这三个通道的颜色直方图结合起来,就是颜色的描写叙述子RGBHistogram. 以下给出计算RGBHistogra ...

  3. Opencv Cookbook阅读笔记(四):用直方图统计像素

    灰度直方图的定义 灰度直方图是灰度级的函数,描述图像中该灰度级的像素个数(或该灰度级像素出现的频率):其横坐标是灰度级,纵坐标表示图像中该灰度级出现的个数(频率). #include <open ...

  4. opencv直方图均衡化

    #include <iostream> #include "highgui.h" #include "cv.h" #include "cx ...

  5. 灰度直方图及处理“cvQueryHistValue_1D”: 找不到标识符”的问题(上)

    // HIstogram.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include "opencv2/opencv.hpp ...

  6. 彩色图像上执行Mean Shift迭代搜索目标 ,维加权直方图 + 巴氏系数 + Mean Shift迭代

    今天要给大家分享的是: 在彩色图像上进行Mean Shift迭代搜索目标 二维加权直方图+巴氏系数+Mean Shift迭代 关于 加权直方图.巴氏系数.Mean Shift迭代 这三者之间的关系请大 ...

  7. OPENCV直方图与匹配

    直方图可以用来描述不同的参数和事物,如物体的色彩分布,物体的边缘梯度模版以及目标位置的当前假设的概率分布. 直方图就是对数据进行统计的一种方法,并且将统计值定义到一系列定义好的bin(组距)中,获得一 ...

  8. OpenCV实现灰度直方图和直方图拉伸

    原文链接:http://blog.csdn.net/xiaowei_cqu/article/details/7600666 如有疑问或者版权问题,请移步原作者或者告知本人. 灰度直方图是数字图像中最简 ...

  9. opencv 7 直方图与匹配

    图像直方图概述 直方图的计算与绘制 计算直方图:calcHist()函数 找寻最值:minMaxLoc()函数 示例程序:绘制H-S直方图 #include "opencv2/highgui ...

随机推荐

  1. JavaScript Math和Number对象研究

    1. Math 对象 1.1 介绍   Math 对象,是数学对象,提供对数据的数学计算,如:获取绝对值.向上取整等.无构造函数,无法被初始化,只提供静态属性和方法.   1.2 构造函数   无 : ...

  2. JavaScript 移动和触摸框架

     jQuery Mobile : 是 jQuery 在手机上和平板设备上的版本号. jQuery Mobile 不仅会给主流移动平台带来jQuery核心库.而且会公布一个完整统一的jQuery移动UI ...

  3. win7基于mahout推荐之用户相似度计算

    http://www.douban.com/note/319219518/?type=like win7基于mahout推荐之用户相似度计算 2013-12-03 09:19:11    事情回到半年 ...

  4. 【大数据】下载Windows版本的Redis 转

    https://www.cnblogs.com/tommy-huang/p/6093813.html 下载Windows版本的Redis   1.打开官网http://redis.io/点击Downl ...

  5. Chrome DevTools — Network

    Chrome DevTools — Network https://segmentfault.com/a/1190000008407729 chrome DevTools的各种使用: 在dev too ...

  6. 不可不知的Python模块: collections

    原文:http://www.zlovezl.cn/articles/collections-in-python/ Python作为一个“内置电池”的编程语言,标准库里面拥有非常多好用的模块.比如今天想 ...

  7. CSOM中如何取到managed metadata类型字段的类型信息

    Field.fieldTypeKind返回的是Invalid [解决方法] There is no "Metadata" type of field in the SP.Field ...

  8. CodeForces 569B Inventory 货物编号

    原题: http://codeforces.com/contest/569/problem/B 题目: Inventory time limit per test1 second memory lim ...

  9. (纪录片)光的故事 BBC Light Fantastic (2004)

    简介: 导演: Jeremy Turner主演: Simon Schaffer / Dimitri Andreas ... Al Hazen / Edmund Dehn ... Priest/Old ...

  10. PowerDesigner添加表注释

    之前同事用PowerDesigner 建立数据模型后,生成到数据库中,没有注释.这导致数据库使用起来不是很方便,特别是对数据表结构不熟悉的同事. 其实,可以添加注释(并且可以逆向,即从数据库中反向更新 ...