//编程环境:VS2008+OpenCV1.1,

//本程序首先挨个读取F://my face database//OnlyFace文件夹下的所有图 像 文件,之后,在项目文件夹下

//建立一 个名为“result.xls”的Excel文件,对于每一 个图 像 文件,在RGB颜色空间进行归 一 化 处理,将每个

//像 素点的R,G,B分量的均值和方差输出到该excel文件中。该程序,可用于对大规模图 像 样本进行训练。

#include "stdafx.h"
#include "afxwin.h"
#include "cv.h"
#include "highgui.h"
#include "fstream" using namespace std ; int _tmain(int argc, _TCHAR* argv[])
{
int height,width,step,channels ;
int i,j,k;
int n= 0 ;
IplImage* img ;
uchar* data ;
uchar BlueValue ;
uchar GreenValue ;
uchar RedValue ;
float sum ; CFileFind ImageFile ;//定义FindFile对象
CString FileName ;//定义图 像 文件的名称
CString ImageFileAddress ;//CString类型的图 像 文件路径
char *FileAddress = new char[38] ;//定义存储文件地址的数组 CvScalar Avg_r,Avg_g ;//红色和绿色的平均值
CvScalar Std_r,Std_g ; float RedAvg,GreenAvg,RedStd,GreenStd ;
float* red = 0 ;
float* green = 0 ; ofstream outobj("result.xls") ;//建立类ofstream的对象outobj,并将其与int.xls关联起来。使用“《”流插入运算符写数据到outobj
outobj<<"RedAvg"<<" "<<"GreenAvg"<<" "<<"RedStd"<<" "<<"GreenStd"<<endl ; bool FileExist = ImageFile.FindFile(_T("F://my face database//OnlyFace//*.jpg"),0) ;//查找所有文件,返回非0表示执行成功
while(FileExist)
{
FileExist = ImageFile.FindNextFileW() ;//如果文件存在,继续寻找下一 个符合条件的文件
if(!ImageFile.IsDots())//0表示文件属性不是“。”和“。。”
{
FileName = ImageFile.GetFileName() ;//获取图 像 文件名称
ImageFileAddress = "F:/my face database/OnlyFace/" + FileName;//得到图 像 文件路径 for(int i=0;i<37;i++)
{
FileAddress[i] = ImageFileAddress[i] ;//应Open CV函数调用的需要,将图 像 文件路径CString格式转换为char*格式
}
FileAddress[37] = '/0' ;//因为char型数组FileAddress存储的是字符串,此处的字符串终止符是必须的 img = cvLoadImage(FileAddress) ;//读取图 像 文件
if(!img) printf("load image file failed!") ;//当打开文件失败时,提示 height = img->height ;
width = img->width ;
step = img->widthStep ;
channels = img->nChannels ;
data = (uchar*)img->imageData ; red = new float[height*width] ;
green = new float[height*width] ; for(i=0;i<height;i++)
{
for(j=0;j<width;j++)
{
for(k=0;k<channels;k++)
{
switch(k)
{
case 0://获取蓝色B分量
{
BlueValue = data[i*step+j*channels+k];
break ;
}
case 1://提取绿色G分量
{
GreenValue = data[i*step+j*channels+k] ;
break ;
}
case 2://提取红色R分量
{
RedValue = data[i*step+j*channels+k] ;
break ;
}
}
}
sum = (float)(RedValue + GreenValue + BlueValue) ;
if(n<height*width)
{
red[n] = (float)RedValue/sum ;//归 一 化 处理
green[n] = (float)GreenValue/sum ;
n++ ;
}
}
} CvMat* MatrixRed = cvCreateMat(1,height*width,CV_32FC1) ;//创建矩阵
CvMat* MatrixGreen = cvCreateMat(1,height*width,CV_32FC1) ;
cvSetData(MatrixRed,red,MatrixRed->step) ;//设置数组头
cvSetData(MatrixGreen,green,MatrixGreen->step) ; cvAvgSdv(MatrixRed,&Avg_r,&Std_r) ;//计算红色分量的均值和标准差
cvAvgSdv(MatrixGreen,&Avg_g,&Std_g) ; RedAvg = Avg_r.val[0] ;
GreenAvg = Avg_g.val[0] ;
RedStd = Std_r.val[0] * Std_r.val[0] ;
GreenStd = Std_g.val[0] * Std_g.val[0] ; outobj<<RedAvg<<" "<<GreenAvg<<" "<<RedStd<<" "<<GreenStd<<endl ; delete [] red ;
delete [] green ;
red = 0 ;
green = 0 ; cvReleaseMat(&MatrixRed) ;
cvReleaseMat(&MatrixGreen) ; cvNamedWindow("Image",CV_WINDOW_AUTOSIZE) ;//创建窗口
cvShowImage("Image",img) ;//显示图 像
cvWaitKey(10) ;
cvDestroyWindow("Image") ;//销毁窗口
cvReleaseImage(&img) ;//销毁图 像
n = 0 ;
}
} while(1) ; delete [] FileAddress ;
return 0;
}

基于OpenCV依次读取文件夹下的所有图像文件的更多相关文章

  1. python 读取文件夹下的图片进行处理

    python的os模块中有一个listdir函数可以遍历读取文件夹下的文件. import os for filename in os.listdir(r"./file"): #l ...

  2. php 读取网页源码 , 导出成txt文件, 读取xls,读取文件夹下的所有文件的文件名

    <?php // 读取网页源码$curl = curl_init();curl_setopt($curl, CURLOPT_URL, $url);curl_setopt($curl, CURLO ...

  3. java读取文件夹下所有文件并替换文件每一行中指定的字符串

    import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.I ...

  4. angular调用WCF服务,读取文件夹下图片显示列表,下载另存为图片

    读取文件夹下的文件 public string ReadImagesPaths() { string result = string.Empty; try { string path = System ...

  5. C#读取文件夹下所有指定类型,并返回相应类型数据

    C#读取文件夹下所有文件 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分享.心 ...

  6. java读取文件夹下文件及txt内容

    public class PositionController {     // 读取txt内容     public static String txt2String(File file) {    ...

  7. 007——转载-MATLAB读取文件夹下的文件名

    (一)参考文献:https://blog.csdn.net/liutaojia/article/details/84899923 (二)第一步:获取文件夹下某类型数据的所有文件名 主要包括三个步骤: ...

  8. QT 读取文件夹下所有文件(超级简单的方法,不需要QDirIterator)

    之前,用标准C++写过读取文件夹.现在用QT重写代码,顺便看了下QT如何实现,还是相当简单的.主要用到QDir,详细文档可见这里 A program that lists all the files ...

  9. Linux C 读取文件夹下所有文件(包括子文件夹)的文件名【转】

    转自:https://www.cnblogs.com/xudong-bupt/p/3504442.html 本文:http://www.cnblogs.com/xudong-bupt/p/350444 ...

随机推荐

  1. 改善程序与设计的55个具体做法 day5

    条款12:复制对象时勿忘其每一个成分 这里的复制是拷贝构造和operator= 每一个成分有几个维度: 1.每个成员变量 这个很好理解,添加新的成员时也要记得为每个新添加的成员执行合适的复制操作 2. ...

  2. 牛客小白月赛1 D 多项式乘法 【循环】

    题目链接 https://www.nowcoder.com/acm/contest/85/D 思路 因为数据范围较小 ,所以 可以直接 一个一个乘 AC代码 #include <cstdio&g ...

  3. Linux服务器上的tomcat中部署web项目

    首先了解一下下面几个概念,讲得不太准确:1.JVMJVM是class以及jar(实际上就是很多个class压缩在一起)的运行环境,特征就是java和javaw命令,通过这两个命令,你可以执行class ...

  4. [转]eclipse中的常用快捷键

    1.选中你要加注释的区域,用ctrl+shift+C 会加上//注释2.先把你要注释的东西选中,用shit+ctrl+/ 会加上注释3.要修改在eclispe中的命令的快捷键方式我们只需进入windo ...

  5. 对unidbgrid的单元格操作

    一.使某行某列单元格disabled: 1. UniStringGrid -> Options -> goEditing = true 2. UniStringGrid -> Ext ...

  6. Hibernate和Struts分页查询

    分页查询数据库方法 /** * 分页查询方法 * @param sql,pageNO,maxResult * @return List */ public List<Object> que ...

  7. Storm- 使用Storm实现词频汇总

    需求:读取指定目录的数据,并实现单词计数的功能 实现方案: Spout来读取指定目录的数据,作为后续Bolt处理的input 使用一个Bolt把input 的数据,切割分开,我们按照逗号进分割 使用一 ...

  8. 仿联想商城laravel实战---3、前端页面搭建(什么情况下需要路由接参数)

    仿联想商城laravel实战---3.前端页面搭建(什么情况下需要路由接参数) 一.总结 一句话总结: 比如访问课程的时候,不同的课程(比如云知梦),比如访问不同的商品,比如访问不同的分类 //商品详 ...

  9. Jquery 取值,赋值学习总结

    <h2>获取和设置文本框值:</h2> <input type="button" value="赋值文件框" id="v ...

  10. Finding Similar Items 文本相似度计算的算法——机器学习、词向量空间cosine、NLTK、diff、Levenshtein距离

    http://infolab.stanford.edu/~ullman/mmds/ch3.pdf 汇总于此 还有这本书 http://www-nlp.stanford.edu/IR-book/ 里面有 ...