基于OpenCV依次读取文件夹下的所有图像文件
来源:互联网 发布:java的mvc框架 编辑:程序博客网 时间:2024/05/23 01:11
//编程环境:VS2008+OpenCV1.1,
//本程序首先挨个读取F://my face database//OnlyFace文件夹下的所有图 像 文件,之后,在项目文件夹下
//建立一 个名为“result.xls”的Excel文件,对于每一 个图 像 文件,在RGB颜色空间进行归 一 化 处理,将每个
//像 素点的R,G,B分量的均值和方差输出到该excel文件中。该程序,可用于对大规模图 像 样本进行训练。
//本程序首先挨个读取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;}
0 0
- 基于OpenCV依次读取文件夹下的所有图像文件
- 如何读取一个文件夹下的所有图像文件,并制作负样本到指定目录
- OpenCV学习笔记---- 挨个读取图像文件夹下的所有文件,进行样本训练
- python+opencv 读取文件夹下的所有图像并批量保存ROI
- 如何读取文件夹下的所有文件名
- VC读取文件夹下的所有文件
- 读取某一文件夹下的所有文件
- VC++读取文件夹下的所有文件
- c++读取文件夹下的所有文件名
- 读取文件夹下的所有文件
- 读取文件夹下所有的文件
- 读取文件夹下的所有文件
- 读取某个文件夹下的所有文件
- 读取某个文件夹下的所有文件
- 读取文件夹下的所有文件
- 读取一个文件夹下的所有文件
- 读取文件夹下的所有文件
- 读取一个文件夹下的所有文件
- svn代码回滚命令
- HDU 4960 Another OCD Patient(DP)
- Candy
- MySQL 数据类型
- HDU 3549 Flow Problem
- 基于OpenCV依次读取文件夹下的所有图像文件
- 数字对象
- JAVA多线程变量的深入认识(三)
- 《C++ Primer》阅读笔记1
- 嵌入式开发技术三级
- 神经网络原理
- HDU 1068 Girls and Boys(二分图最大匹配)
- Android中SQLite应用详解
- string的格式化