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

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

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

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

  1. #include "stdafx.h"
  2. #include "afxwin.h"
  3. #include "cv.h"
  4. #include "highgui.h"
  5. #include "fstream"
  6.  
  7. using namespace std ;
  8.  
  9. int _tmain(int argc, _TCHAR* argv[])
  10. {
  11. int height,width,step,channels ;
  12. int i,j,k;
  13. int n= 0 ;
  14. IplImage* img ;
  15. uchar* data ;
  16. uchar BlueValue ;
  17. uchar GreenValue ;
  18. uchar RedValue ;
  19. float sum ;
  20.  
  21. CFileFind ImageFile ;//定义FindFile对象
  22. CString FileName ;//定义图 像 文件的名称
  23. CString ImageFileAddress ;//CString类型的图 像 文件路径
  24. char *FileAddress = new char[38] ;//定义存储文件地址的数组
  25.  
  26. CvScalar Avg_r,Avg_g ;//红色和绿色的平均值
  27. CvScalar Std_r,Std_g ;
  28.  
  29. float RedAvg,GreenAvg,RedStd,GreenStd ;
  30. float* red = 0 ;
  31. float* green = 0 ;
  32.  
  33. ofstream outobj("result.xls") ;//建立类ofstream的对象outobj,并将其与int.xls关联起来。使用“《”流插入运算符写数据到outobj
  34. outobj<<"RedAvg"<<" "<<"GreenAvg"<<" "<<"RedStd"<<" "<<"GreenStd"<<endl ;
  35.  
  36. bool FileExist = ImageFile.FindFile(_T("F://my face database//OnlyFace//*.jpg"),0) ;//查找所有文件,返回非0表示执行成功
  37. while(FileExist)
  38. {
  39. FileExist = ImageFile.FindNextFileW() ;//如果文件存在,继续寻找下一 个符合条件的文件
  40. if(!ImageFile.IsDots())//0表示文件属性不是“。”和“。。”
  41. {
  42. FileName = ImageFile.GetFileName() ;//获取图 像 文件名称
  43. ImageFileAddress = "F:/my face database/OnlyFace/" + FileName;//得到图 像 文件路径
  44.  
  45. for(int i=0;i<37;i++)
  46. {
  47. FileAddress[i] = ImageFileAddress[i] ;//应Open CV函数调用的需要,将图 像 文件路径CString格式转换为char*格式
  48. }
  49. FileAddress[37] = '/0' ;//因为char型数组FileAddress存储的是字符串,此处的字符串终止符是必须的
  50.  
  51. img = cvLoadImage(FileAddress) ;//读取图 像 文件
  52. if(!img) printf("load image file failed!") ;//当打开文件失败时,提示
  53.  
  54. height = img->height ;
  55. width = img->width ;
  56. step = img->widthStep ;
  57. channels = img->nChannels ;
  58. data = (uchar*)img->imageData ;
  59.  
  60. red = new float[height*width] ;
  61. green = new float[height*width] ;
  62.  
  63. for(i=0;i<height;i++)
  64. {
  65. for(j=0;j<width;j++)
  66. {
  67. for(k=0;k<channels;k++)
  68. {
  69. switch(k)
  70. {
  71. case 0://获取蓝色B分量
  72. {
  73. BlueValue = data[i*step+j*channels+k];
  74. break ;
  75. }
  76. case 1://提取绿色G分量
  77. {
  78. GreenValue = data[i*step+j*channels+k] ;
  79. break ;
  80. }
  81. case 2://提取红色R分量
  82. {
  83. RedValue = data[i*step+j*channels+k] ;
  84. break ;
  85. }
  86. }
  87. }
  88. sum = (float)(RedValue + GreenValue + BlueValue) ;
  89. if(n<height*width)
  90. {
  91. red[n] = (float)RedValue/sum ;//归 一 化 处理
  92. green[n] = (float)GreenValue/sum ;
  93. n++ ;
  94. }
  95. }
  96. }
  97.  
  98. CvMat* MatrixRed = cvCreateMat(1,height*width,CV_32FC1) ;//创建矩阵
  99. CvMat* MatrixGreen = cvCreateMat(1,height*width,CV_32FC1) ;
  100. cvSetData(MatrixRed,red,MatrixRed->step) ;//设置数组头
  101. cvSetData(MatrixGreen,green,MatrixGreen->step) ;
  102.  
  103. cvAvgSdv(MatrixRed,&Avg_r,&Std_r) ;//计算红色分量的均值和标准差
  104. cvAvgSdv(MatrixGreen,&Avg_g,&Std_g) ;
  105.  
  106. RedAvg = Avg_r.val[0] ;
  107. GreenAvg = Avg_g.val[0] ;
  108. RedStd = Std_r.val[0] * Std_r.val[0] ;
  109. GreenStd = Std_g.val[0] * Std_g.val[0] ;
  110.  
  111. outobj<<RedAvg<<" "<<GreenAvg<<" "<<RedStd<<" "<<GreenStd<<endl ;
  112.  
  113. delete [] red ;
  114. delete [] green ;
  115. red = 0 ;
  116. green = 0 ;
  117.  
  118. cvReleaseMat(&MatrixRed) ;
  119. cvReleaseMat(&MatrixGreen) ;
  120.  
  121. cvNamedWindow("Image",CV_WINDOW_AUTOSIZE) ;//创建窗口
  122. cvShowImage("Image",img) ;//显示图 像
  123. cvWaitKey(10) ;
  124. cvDestroyWindow("Image") ;//销毁窗口
  125. cvReleaseImage(&img) ;//销毁图 像
  126. n = 0 ;
  127. }
  128. }
  129.  
  130. while(1) ;
  131.  
  132. delete [] FileAddress ;
  133. return 0;
  134. }

基于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. Qt Creator 调试器 在 Ubuntu 13.10下 局部变量和表达式(Locals) 无内容

    此篇算是一个翻译,万一有国内同样的小白遇到同样问题,方便参考. 原文http://hostilefork.com/2013/10/20/qtcreator-debugger-no-locals-ubu ...

  2. 在 CentOS7最小化 下的编译安装:Nginx 1.5.2 + PHP 5.5.7 + MySQL 5.6.10

    1.安装Nginx: 安装包目录 mkdir -p /Data/tgzcd /Data/tgz 安装编译依赖 yum install wget yum install pcre yum install ...

  3. 【LeetCode】【动态规划】Generate Parentheses(括号匹配问题)

    描述 Given n pairs of parentheses, write a function to generate all combinations of well-formed parent ...

  4. Data Structure Array: Maximum circular subarray sum

    http://www.geeksforgeeks.org/maximum-contiguous-circular-sum/ #include <iostream> #include < ...

  5. composer 更新国内镜像地址

    composer config -g repo.packagist composer https://packagist.phpcomposer.com​

  6. 从mysqldump整库备份文件中恢复单表

    最近,系统更新出现了问题,比较紧急,需要对三张表进行回档.由于我们都是采用mysqldump进行每天全备整库,数据量比较大,一个备份文件大概有70G,需要从这个70G文件中恢复三张表,真是蛋疼至极啊, ...

  7. 【Flask】视图高级

    # 视图高级笔记:### `add_url_rule(rule,endpoint=None,view_func=None)`这个方法用来添加url与视图函数的映射.如果没有填写`endpoint`,那 ...

  8. linux学习系列一

    1. 基本命令(注意参数的大小写) 学习linux如果使用的是windows 建议使用一个很好用的工具git,下载安装即可使用linux下的命令来操作windows 1.1目录及文件 注意/ 有表示根 ...

  9. Hibernate映射--基本类映射和对象关系映射(转)

    原文地址:http://blog.csdn.net/lovesummerforever/article/details/20901011   尊重原创,请访问原网址 回想一些我们在没有学习ssh的时候 ...

  10. Python基础-列表推导式

    python中列表推导式有三种数据类型可用:列表,字典,集合 列表推导式书写形式: [表达式 for 变量 in 列表]    或者  [表达式 for 变量 in 列表 if 条件] 1,列表推导式 ...