基于OpenCV依次读取文件夹下的所有图像文件
//编程环境: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依次读取文件夹下的所有图像文件的更多相关文章
- python 读取文件夹下的图片进行处理
python的os模块中有一个listdir函数可以遍历读取文件夹下的文件. import os for filename in os.listdir(r"./file"): #l ...
- php 读取网页源码 , 导出成txt文件, 读取xls,读取文件夹下的所有文件的文件名
<?php // 读取网页源码$curl = curl_init();curl_setopt($curl, CURLOPT_URL, $url);curl_setopt($curl, CURLO ...
- java读取文件夹下所有文件并替换文件每一行中指定的字符串
import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.I ...
- angular调用WCF服务,读取文件夹下图片显示列表,下载另存为图片
读取文件夹下的文件 public string ReadImagesPaths() { string result = string.Empty; try { string path = System ...
- C#读取文件夹下所有指定类型,并返回相应类型数据
C#读取文件夹下所有文件 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分享.心 ...
- java读取文件夹下文件及txt内容
public class PositionController { // 读取txt内容 public static String txt2String(File file) { ...
- 007——转载-MATLAB读取文件夹下的文件名
(一)参考文献:https://blog.csdn.net/liutaojia/article/details/84899923 (二)第一步:获取文件夹下某类型数据的所有文件名 主要包括三个步骤: ...
- QT 读取文件夹下所有文件(超级简单的方法,不需要QDirIterator)
之前,用标准C++写过读取文件夹.现在用QT重写代码,顺便看了下QT如何实现,还是相当简单的.主要用到QDir,详细文档可见这里 A program that lists all the files ...
- Linux C 读取文件夹下所有文件(包括子文件夹)的文件名【转】
转自:https://www.cnblogs.com/xudong-bupt/p/3504442.html 本文:http://www.cnblogs.com/xudong-bupt/p/350444 ...
随机推荐
- Qt Creator 调试器 在 Ubuntu 13.10下 局部变量和表达式(Locals) 无内容
此篇算是一个翻译,万一有国内同样的小白遇到同样问题,方便参考. 原文http://hostilefork.com/2013/10/20/qtcreator-debugger-no-locals-ubu ...
- 在 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 ...
- 【LeetCode】【动态规划】Generate Parentheses(括号匹配问题)
描述 Given n pairs of parentheses, write a function to generate all combinations of well-formed parent ...
- Data Structure Array: Maximum circular subarray sum
http://www.geeksforgeeks.org/maximum-contiguous-circular-sum/ #include <iostream> #include < ...
- composer 更新国内镜像地址
composer config -g repo.packagist composer https://packagist.phpcomposer.com
- 从mysqldump整库备份文件中恢复单表
最近,系统更新出现了问题,比较紧急,需要对三张表进行回档.由于我们都是采用mysqldump进行每天全备整库,数据量比较大,一个备份文件大概有70G,需要从这个70G文件中恢复三张表,真是蛋疼至极啊, ...
- 【Flask】视图高级
# 视图高级笔记:### `add_url_rule(rule,endpoint=None,view_func=None)`这个方法用来添加url与视图函数的映射.如果没有填写`endpoint`,那 ...
- linux学习系列一
1. 基本命令(注意参数的大小写) 学习linux如果使用的是windows 建议使用一个很好用的工具git,下载安装即可使用linux下的命令来操作windows 1.1目录及文件 注意/ 有表示根 ...
- Hibernate映射--基本类映射和对象关系映射(转)
原文地址:http://blog.csdn.net/lovesummerforever/article/details/20901011 尊重原创,请访问原网址 回想一些我们在没有学习ssh的时候 ...
- Python基础-列表推导式
python中列表推导式有三种数据类型可用:列表,字典,集合 列表推导式书写形式: [表达式 for 变量 in 列表] 或者 [表达式 for 变量 in 列表 if 条件] 1,列表推导式 ...