//编程环境: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. VS2013 Pro版本密钥

    Visual Studio Professional 2013 KEY(密钥): XDM3T-W3T3V-MGJWK-8BFVD-GVPKY

  2. QT里面的delay使用

    void delay() { QTime dieTime= QTime::currentTime().addSecs(1); while( QTime::currentTime() < dieT ...

  3. 在Nginx中做负载均衡配置的实例讲解

    负载均衡是我们大流量网站要做的一个东西,下面我来给大家介绍在Nginx服务器上进行负载均衡配置方法. 先来简单了解一下什么是负载均衡,单从字面上的意思来理解就可以解释N台服务器平均分担负载,不会因为某 ...

  4. iOS UIImage 图片局部拉伸的一些学习要点

    之前 做纯色局部拉伸 通过 top  bottom left  right 相交的阴影拉伸 屡试不爽 实施方法: imageView.image = [[UIImage imageNamed: @&q ...

  5. SQl Server 中登录名 、用户、角色、概念一览

      转载:http://www.2cto.com/database/201306/216922.html       数据库,角色,用户,安全        登录SQL server 2008可以用w ...

  6. Mac安装使用kettle

    kettle是一个ETL工具 下载安装 https://jaist.dl.sourceforge.net/project/pentaho/Data Integration/ 选择版本后下载,并解压,如 ...

  7. 大话设计模式--工厂方法模式 Factory Method -- C++实现

    1. 工厂方法模式 定义一个用于创建对象的接口, 让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类. 和简单工厂模式相比: A: 简单工厂模式最大的优点在于工厂类中包含有必要的逻辑判断, ...

  8. 大话设计模式--策略模式 strategy -- C++实现实例

    1. 策略模式: 它定义了算法家族, 分别封装起来,使他们之间可以相互替换,此模式让算法变化, 不会影响到使用算法的客户. 用相同的方法调用不同的算法,减少各种算法类与使用算法类之间的耦合. 实例中策 ...

  9. 分享知识-快乐自己:N及分类(双重循环、递归)实现

    实现多级分类: 1.双重 for 循环实现 N 及分类 /*** * 执行遍历 * * @param menus * 所有权限列表集合 * @param list * 指定角色查询到的 权限Id * ...

  10. 初识JQuery(1)-选择器

    初识jquery 在学习jquery之前,就有看过一些相关的视频,才知道它是可以写很少的代码就可以完成很多事的.记得第一写轮播图的时候,首先就百度了篇轮播图的实现,当时还不知道自己百度的其实不是原生的 ...