_________________________________________________________________________________________________________________________________

批处理(dir/a/s/b)

例:某文件夹下有a、b、c、d、e、f、g、h、j的图片和一个文件夹JN,里边包括一张图片john.jpg

我们在该文件夹下的命令行中 输入:dir/b

b:仅仅显示当前文件夹下文件名称及文件夹名

a-d:仅仅是显示该文件夹下的文件名称(没有了文件夹的名)

我们在该文件夹下的命令行中 输入:dir/a-d/b

S:显示该文件夹下的文件名称和文件夹名,及子文件夹下的文件名称,并显示这些文件的绝对路径

我们在该文件夹下的命令行中 输入:dir/s/b


我们在该文件夹下的命令行中 输入:dir/s/a-d/b(因为a-d的作用,文件夹JN没有显示出来)

我们在该文件夹下的命令行中 输入:dir/s/a-d/b>F:\文件夹.txt

就会在F盘生成一个文件名称为 文件夹 的.txt文件,该文件包括上面的命令行打出的内容。

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

第二步:既然已经生成上述文件 文件夹.txt,然会我们敲代码读取这个 文件夹.txt 就可以。

<span style="font-family:Microsoft YaHei;font-size:14px;"><span style="font-family:Microsoft YaHei;font-size:14px;"><span style="font-family:Microsoft YaHei;font-size:14px;">#include<iostream>
#include<fstream>
#include<string>
using namespace std;
int main(int argc,char* argv[])
{
if(argc !=2)
{
cerr << "Wrong Argument !" <<endl;
return -1;
}
//定义文件流。仅仅能读取
ifstream inPutFile(argv[1],ios::in);
if(! inPutFile)
{
cerr << "File Open Erro !" <<endl;
return -1;
}
//读取文件流中的每一行,并赋值给fileName。并在命令行中打印
string fileName ;
/*
測试读取文件里的每一行
*/
//行数
int number = 0;
while (getline(inPutFile,fileName))
{
number ++;
cout<<"第"<< number << "行"<< fileName <<endl;
}
//注意一定要记得关闭文件流
inPutFile.close();
return 0;
}</span></span></span>

我们编译一下:

我们看一下输出结果:

好的,这样,说明我们读到了每一行。

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

第三步:配置Opencv,然后,读取显示每一幅图片

<span style="font-family:Microsoft YaHei;font-size:14px;"><span style="font-family:Microsoft YaHei;font-size:14px;">#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;
int main(int argc,char* argv[])
{
if(argc !=2)
{
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;
while (getline(inPutFile,fileName))
{ image = imread(fileName,1);
namedWindow(fileName,1);
imshow(fileName,image);
}
waitKey(0);
//注意一定要记得关闭文件流
inPutFile.close();
return 0;
}</span></span>

结果:

我们看到我们已经成功把每一幅图像读入到内存中,这样我们就能够求每一幅图像的特征。

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

第四步:我们计算每一幅图像的直方图特征(当然opencv中sift、surf、densesift等,由于我这里的图片大小不一样。所以我用直方图的特征。使得特征向量的长度一样)

<span style="font-family:Microsoft YaHei;font-size:14px;">#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 hist2d(const Mat& src); int main(int argc,char* argv[])
{
if(argc !=2)
{
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 = hist2d(image);
//按行存储每一幅图像的二维直方图特征
featureHists.push_back(featureHist);
}
//注意一定要记得关闭文件流
inPutFile.close();
return 0;
} Mat hist2d(const Mat& src)
{
Mat hsv; //颜色空间的转换 BGR2HSV
cvtColor(src,hsv,CV_BGR2HSV); //把H通道分为30个bin。把S通道分为32bin
int hbins = 30;
int sbins = 32;
int histSize[] = { hbins , sbins}; //H的取值范围 0-179
float hranges[]= {0,180};
//S的取值范围 0-255
float sranges [] ={0,256};
const float* ranges [] ={hranges,sranges}; Mat hist2D,histRow,histRowDst;
//我们依据图像的第一通道和第二通道,计算二维直方图,并且输出的hist2D为32F
int channels [] ={0,1};
calcHist(&hsv,1,channels,Mat(),hist2D,2,histSize,ranges,true,false);
//把直方图特征按一行来存储
histRow=hist2D.reshape(1,1); //把直方图归一化
normalize(histRow,histRowDst,1,0,NORM_L1); return histRowDst;
}</span>

这样就把全部的图像的二维直方图特征按行存储在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 hist2d(const Mat& src); int main(int argc,char* argv[])
{
if(argc !=2)
{
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 = hist2d(image);
//按行存储每一幅图像的二维直方图特征
featureHists.push_back(featureHist);
}
//注意一定要记得关闭文件流
inPutFile.close(); /*第五步。把图像特征保存到.xml文件里*/
FileStorage fs("C:\\Users\\zhaoyuan001\\Desktop\\test\\dirtest\\x64\\Debug\\da.xml",FileStorage::WRITE);
fs<<"featureHists"<<featureHists;
fs.release(); return 0;
} Mat hist2d(const Mat& src)
{
Mat hsv; //颜色空间的转换 BGR2HSV
cvtColor(src,hsv,CV_BGR2HSV); //把H通道分为30个bin,把S通道分为32bin
int hbins = 30;
int sbins = 32;
int histSize[] = { hbins , sbins}; //H的取值范围 0-179
float hranges[]= {0,180};
//S的取值范围 0-255
float sranges [] ={0,256};
const float* ranges [] ={hranges,sranges}; Mat hist2D,histRow,histRowDst;
//我们依据图像的第一通道和第二通道,计算二维直方图,并且输出的hist2D为32F
int channels [] ={0,1};
calcHist(&hsv,1,channels,Mat(),hist2D,2,histSize,ranges,true,false);
//把直方图特征按一行来存储
histRow=hist2D.reshape(1,1); //把直方图归一化
normalize(histRow,histRowDst,1,0,NORM_L1); return histRowDst;
}

_______________________________________________________________________________________________________________________________

上面已经批处理提取了图像的特征,那么通常我们再做目标识别、检測时。会给训练数据集,准备类标签。以下,继续对上述程序进行拓展。

opencv批处理提取图像的特征的更多相关文章

  1. CNN基础二:使用预训练网络提取图像特征

    上一节中,我们采用了一个自定义的网络结构,从头开始训练猫狗大战分类器,最终在使用图像增强的方式下得到了82%的验证准确率.但是,想要将深度学习应用于小型图像数据集,通常不会贸然采用复杂网络并且从头开始 ...

  2. 原来CNN是这样提取图像特征的。。。

    对于即将到来的人工智能时代,作为一个有理想有追求的程序员,不懂深度学习(Deep Learning)这个超热的领域,会不会感觉马上就out了?作为机器学习的一个分支,深度学习同样需要计算机获得强大的学 ...

  3. VGG16提取图像特征 (torch7)

    VGG16提取图像特征 (torch7) VGG16 loadcaffe torch7 下载pretrained model,保存到当前目录下 th> caffemodel_url = 'htt ...

  4. 深度学习tensorflow实战笔记 用预训练好的VGG-16模型提取图像特征

    1.首先就要下载模型结构 首先要做的就是下载训练好的模型结构和预训练好的模型,结构地址是:点击打开链接 模型结构如下: 文件test_vgg16.py可以用于提取特征.其中vgg16.npy是需要单独 ...

  5. 学习OpenCV——BOW特征提取函数(特征点篇)

    没日没夜的改论文生活终于要告一段落了,比起改论文,学OpenCV就是一件幸福的事情.OpenCV的发展越来越完善了,已经可以直接使用BOW函数来进行对象分类了. 简单的通过特征点分类的方法:     ...

  6. 图像的特征工程:HOG特征描述子的介绍

    介绍 在机器学习算法的世界里,特征工程是非常重要的.实际上,作为一名数据科学家,这是我最喜欢的方面之一!从现有特征中设计新特征并改进模型的性能,这就是我们进行最多实验的地方. 世界上一些顶级数据科学家 ...

  7. MATLAB·提取图像中多个目标

    基于matlab工具箱提取图像中的多目标特征(代码如下): 代码前面部分为提取图像的边界信息,调用了后面的遍历函数Pixel_Search,函数实现方法见后~ %%ROI Testing close ...

  8. OpenCV学习(33) 轮廓的特征矩Moment

    在OpenCV中,可以很方便的计算多边形区域的3阶特征矩,opencv中的矩主要包括以下几种:空间矩,中心矩和中心归一化矩. class Moments { public: ...... // 空间矩 ...

  9. OpenCV代码提取:dft函数的实现

    The Fourier Transform will decompose an image into its sinus and cosines components. In other words, ...

随机推荐

  1. android视频播放器系列(一)——系统播放器

    使用系统播放器(intent隐士调用)可以播放本地视频和网络视频,但是使用方式上稍微有点差别: 一.播放本地视频 Uri uri = Uri.parse("本地视频地址");Int ...

  2. form提交地址地址正确但是依旧报错404找不到路径

    ---恢复内容开始--- 我的jsp中保含了">="和"<="符号,form提交的时候会有个标签校验,如下: private static bool ...

  3. PHP实现前台页面与MySQL的数据绑定、同步更新

    今天我来给大家介绍一个PHP-MySQL的小项目. 使用 PHP和前台Ajax 实现在前台对MySQL数据库中数据的增.删等操作语句功能. 如果有问题,欢迎拍砖~ 首先,我们先做好前台HTML.CSS ...

  4. Linux系列教程(十七)——Linux权限管理之文件系统系统属性chattr权限和sudo命令

    上篇博客我们介绍了权限管理的ACL权限,通过设定 ACL 权限,我们为某个用户指定某个文件的特定权限.这篇博客我们将介绍权限管理中用的比较多的两个命令 chattr 和 sudo . 1.设定文件系统 ...

  5. 从零开始搭建Vue组件库 VV-UI

    前言: 前端组件化是当今热议的话题之一,也是我们在开发单页应用经常会碰到的一个问题,现在我们有了功能非常完善的Element-UI.各个大厂也相继宣布开源XXX-UI.但是也会存在一些问题,比如每个公 ...

  6. Velocity(2)——常用语法

    Velocity是一个基于java的模板引擎(template engine),它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码定义的对象.作为一个比较完善 ...

  7. 教你五步制作精美的HTML时钟

    学了一段时间的HTML.CSS和JS后,给大家做一款漂亮的不像实力派的HTML时钟,先看图:涉及到的知识点有: CSS3动画.DOM操作.定时器.圆点坐标的计算(好多人是不是已经还给自己的老师了~)  ...

  8. HTML基础--position 绝对定位 相对定位 锚点链接

    position 定位属性,检索对象的定位方式 一.语法:position:static /absolute/relative/fixed 取值: 1.static:默认值,无特殊定位,对象遵循HTM ...

  9. 通过游戏认识 --- JQuery与原生JS的差异

      前言 jQuery是一个快速.简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库( 或JavaScript框架).jQuery设计的宗旨是“write ...

  10. Postman+newman+jenkins构建

      最近忙着项目接口测试,经过不同工具的对比,发现postman使用起来挺顺手的,所以马上决定使用这个工具进行接口测试工作.刚开始的时候,了解了下接口测试的相关信息,直接着手编写接口测试的测试用例信息 ...