//编程环境: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. python基础22------python基础之基于tcp和udp的套接字

    一.TCP套接字 1.low版tcp套接字 服务器端 客户端 2.改进版tcp套接字 服务端 客户端 二.UDP的套接字 服务器 客户端 注:udp的套接字可以支持多个客户端同时访问,但tcp套接字就 ...

  2. cache:annotation-driven" 的前缀 "cache" 未绑定

    问题: Caused by: org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 29 in XML ...

  3. 让input表单输入框不记录输入过信息的方法

    有过表单设计经验的朋友肯定知道,当我们在浏览器中输入表单信息的时候,往往input文本输入框会记录下之前提交表单的信息,以后每次只要双击input文本输入框就会出现之前输入的文本,这样有时会觉得比较方 ...

  4. 转 开启“大数据”时代--大数据挑战与NoSQL数据库技术 iteye

    一直觉得“大数据”这个名词离我很近,却又很遥远.最近不管是微博上,还是各种技术博客.论坛,碎碎念大数据概念的不胜枚举. 在我的理解里,从概念理解上来讲,大数据的目的在于更好的数据分析,否则如此大数据的 ...

  5. Python 变量(赋值,数据类型,数据类型转换)

    一.python 变量赋值方式有三种: 1.直接赋值:age = 28 2.多个变量赋值 age, sex = 28, 1  #每个变量都必须要有个对应的值 3.特殊形式的赋值(链式赋值)  a = ...

  6. Delphi 中关闭指定进程的方法

    Uses Windows, SysUtils, Tlhelp32 ; Function KillTask( ExeFileName: String ): Integer ; //关闭进程 Functi ...

  7. Linux 查看CPU信息

    Linux查看CPU信息的命令 more /proc/cpuinfo 结果 processor : 0 vendor_id : GenuineIntel cpu family : 6 model : ...

  8. HDU 4055 Number String:前缀和优化dp【增长趋势——处理重复选数】

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4055 题意: 给你一个由'I', 'D', '?'组成的字符串,长度为n,代表了一个1~n+1的排列中 ...

  9. jquery的ajax(err)

    load()方法 load()方法是jquery中最为简单和常用的ajax方法. 直接使用ajax技术的流程 1.创建xmlhttprequest对象 2.调用open函数("提交方式&qu ...

  10. QuickReport FastReport

    一.QuickReport1.安装Component->Install packages->X:/Program Files/Borland/Delphi7/Bin/dclqrt70.bp ...