//编程环境: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. C# 串口调试助手源码

    本方法,禁用跨进程错误(做法不太好,但是对于单片机出身的人来说,好理解,能用就行). 基本功能: 1.点串口号的下拉菜单自动当前检索设备管理器的COM 2.发送模式可选,hex和string两种 3. ...

  2. 【WEB】高并发Web服务的演变-节约系统内存和CPU

    目前主流浏览器通常可以存在2-6个并发. 连接和请求,占据了服务器的大量CPU和内存等资源.在资源数目超过100+的网站页面中,使用更多的下载连接,非常有必要. 缓解“高并发”的压力的手段. 一. W ...

  3. 《C+编程规范 101条规则、准则与最佳实践》笔记

    <C+编程规范 101条规则.准则与最佳实践> 0.不要拘泥于小节(了解哪些东西不应该标准化) * 与组织内现有编码规范一致即可 * 包括但不限于: - 缩进 - 行长度 - 命名规范 - ...

  4. 改善程序与设计的55个具体做法 day7

    条款18:让接口容易被正确使用,不易被误用 这里说的接口是广义上的接口,即包括但不限于函数接口.类接口.template接口等,每一种接口都是客户与你的代码进行交互的手段. 我们对客户的所谓“资质或水 ...

  5. php......调研投票练习

    调研题目与调研选项显示页面<style type="text/css"> #list{ width:400px; height:200px;} #jieguo{ wid ...

  6. Debug tool 学习笔记

    GDB调试命令大全 gdb --pid 1235 gdb core.1234 where (bt)    //where the segmentation fault occurred f 1     ...

  7. Mysql——JDBC编程 简单的例子

    第一类连接Mysql方法见下图: 第二类连接Mysql方法:(跟第一类差不多,并提供查询操作) 首先在Mysql中建立testjdbc数据库,在该数据库下面建立Student表: 参考代码: CREA ...

  8. spring项目命名

    groupId 一般分为多个段,最简单的分两段,第一段为域,第二段为公司名称.域又分为org.com.cn等等许多, 举个apache公司的tomcat项目例子:这个项目的groupId是org.ap ...

  9. 一、Perfect Squares 完全平方数

    一原题 Given a positive integer n, find the least number of perfect square numbers (, , , , ...) which ...

  10. 算法(Algorithms)第4版 练习 2.3.17

    关键代码: public static void sort(Comparable[] a) { StdRandom.shuffle(a);//eliminate dependence on input ...