图像检索:一维直方图+欧几里得距离+flann+KNN
在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的更多相关文章
- 图像检索:一维直方图+EMD距离
EMD距离具体介绍已经在在这里已经给出. 思路:我们把一张图像的归一化的一维直方图作为signature的权值,也就是一般在比較两幅图像颜色直方图的EMD距离时,每一行的坐标一样,仅仅是权重值不一样. ...
- 图像检索:RGBHistogram+欧几里得距离|卡方距离
RGBHistogram: 分别计算把彩色图像的三个通道R.G.B的一维直方图,然后把这三个通道的颜色直方图结合起来,就是颜色的描写叙述子RGBHistogram. 以下给出计算RGBHistogra ...
- Opencv Cookbook阅读笔记(四):用直方图统计像素
灰度直方图的定义 灰度直方图是灰度级的函数,描述图像中该灰度级的像素个数(或该灰度级像素出现的频率):其横坐标是灰度级,纵坐标表示图像中该灰度级出现的个数(频率). #include <open ...
- opencv直方图均衡化
#include <iostream> #include "highgui.h" #include "cv.h" #include "cx ...
- 灰度直方图及处理“cvQueryHistValue_1D”: 找不到标识符”的问题(上)
// HIstogram.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include "opencv2/opencv.hpp ...
- 彩色图像上执行Mean Shift迭代搜索目标 ,维加权直方图 + 巴氏系数 + Mean Shift迭代
今天要给大家分享的是: 在彩色图像上进行Mean Shift迭代搜索目标 二维加权直方图+巴氏系数+Mean Shift迭代 关于 加权直方图.巴氏系数.Mean Shift迭代 这三者之间的关系请大 ...
- OPENCV直方图与匹配
直方图可以用来描述不同的参数和事物,如物体的色彩分布,物体的边缘梯度模版以及目标位置的当前假设的概率分布. 直方图就是对数据进行统计的一种方法,并且将统计值定义到一系列定义好的bin(组距)中,获得一 ...
- OpenCV实现灰度直方图和直方图拉伸
原文链接:http://blog.csdn.net/xiaowei_cqu/article/details/7600666 如有疑问或者版权问题,请移步原作者或者告知本人. 灰度直方图是数字图像中最简 ...
- opencv 7 直方图与匹配
图像直方图概述 直方图的计算与绘制 计算直方图:calcHist()函数 找寻最值:minMaxLoc()函数 示例程序:绘制H-S直方图 #include "opencv2/highgui ...
随机推荐
- Poly2Tri介绍[转]
https://blog.csdn.net/xys206006/article/details/83002326 这是Poly2Tri介绍的翻译博文.原文链接:http://sites-final.u ...
- WPF中使用流文档
转载自:http://www.cnblogs.com/zlgcool/archive/2008/11/17/1335456.html WPF面向的是UI展现,而文本显示无疑是UI层中的重要功能之一.W ...
- Sublime Text 3中SublimeLinter的使用
关于Sublime Text 2中的SublimeLinter的使用网上多如牛毛,基本上不会遇到什么问题,简单的讲一下关于Sublime Text 3中遇到的问题: 1.通过package cont ...
- Proguard使用最新,最全教程,亲自试验
最近公司有一个项目,是外包项目,由于对方也有技术人员,出于技术上的保密,需要对class文件进行二次处理,于是网上找了好久,只发现Proguard是用的最广泛而且网上资料最多的.由于不是纯JAVA项目 ...
- Spark(十二)--性能调优篇
一段程序只能完成功能是没有用的,只能能够稳定.高效率地运行才是生成环境所需要的. 本篇记录了Spark各个角度的调优技巧,以备不时之需. 一.配置参数的方式和观察性能的方式 额...从最基本的开始讲, ...
- WPF 动态改变窗口大小
1.删除 Width 和 Height 属性:2.将 Windows.SizeToContent 属性设置为 WidthAndHeight这时窗口就能自动调整自身大小,从而容纳所包含的内容. 通过将 ...
- LintCode: Number of Airplanes in the Sky
C++ (1)把interval数组中的所有start和所有end放在同一个数组中,然后进行排序,遇到start就起飞一架飞机,遇到一架end就降落一架飞机,所以start有个+1属性,end有个-1 ...
- 使用Jmeter对API进行性能测试
先补充刚才测试的部分截图余下,后续详细补充内容. API Test.jmx 如下: <?xml version="1.0" encoding="UTF-8" ...
- 第六周 Word目录和索引
第六周 Word目录和索引 教学时间 2013-4-2 教学课时 2 教案序号 5 教学目标 能正确使用索引.目录等 教学过程: 复习提问 1.脚注和尾注的区别是什么?2.如何插入脚注和尾注?3.如何 ...
- DFS研究
1.DFS和杀毒软件的影响:http://www.symantec.com/connect/forums/sep-and-dfs-replication 2.DFS深度:http://technet. ...