设为首页 加入收藏

TOP

Linux C读取并处理文件夹下的所有文件
2014-11-23 23:41:47 来源: 作者: 【 】 浏览:8
Tags:Linux 读取 处理 文件夹 所有 文件

Linux C读取并处理文件夹下的所有文件,定义传递参数使用的结构体:头文件


#ifndef _PARAM_H_
#define _PARAM_H_


typedef struct str_1_param
{
char *str;
void *param;
} STR_1_PARAM, *pSTR_1_PARAM;


#endif


使用方法:遍历文件夹下图片,提起hog特征:


#include
#include
#include "param.h"
#include "procdir.h"
#include "cv.h"
#include "opencv2/opencv.hpp"


using namespace cv;

typedef struct MY_PARAM
{
IplImage *img;
IplImage *dst;
HOGDescriptor *hog;
FILE *pout;
vector descriptors;
} MY_PARAM, *pMY_PARAM;


void extr_hog(void *s1p)
{
STR_1_PARAM *str1param = (STR_1_PARAM*)s1p;
MY_PARAM *my_param = (MY_PARAM*)str1param->param;
my_param->img = cvLoadImage(str1param->str,0);
cvSmooth(my_param->img, my_param->dst, CV_GAUSSIAN, 3, 3);
my_param->hog->compute(my_param->dst, my_param->descriptors, Size(1,1), Size(0,0));
for(int i=0;idescriptors.size();i++)
{
fprintf(my_param->pout, "%f ", my_param->descriptors[i]);
}
fprintf(my_param->pout, "\n");
cvReleaseImage(&my_param->img);
}


int main(int argc, char **argv)
{
if(argc != 5 )
{
printf("Usage:\n%s [-d InputBaseDir] [-o OutputFile]\n", argv[0]);
return -1;
}


char tmp, *base, *output;
while((tmp=getopt(argc,argv,"d:o:"))!=-1)
{
switch(tmp)
{
case 'd':
base = optarg;
break;
case 'o':
output = optarg;
break;
}
}


FILE *pOutFile;
pOutFile = fopen(output,"w");
if(!pOutFile)
{
printf("Open/create file %s failed!\n", output);
return -1;
}


MY_PARAM my_param;
my_param.dst = cvCreateImage(cvSize(64,64),8,1);
my_param.pout = pOutFile;
my_param.hog = new HOGDescriptor(cvSize(64,64),cvSize(16,16),cvSize(8,8),cvSize(8,8),9);
STR_1_PARAM str1param;
str1param.param = &my_param;

   int rval = procdir(base, extr_hog, &str1param, 1);


fclose(pOutFile);


return 0;
}



】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇OpenCV交叉编译错误的修改 下一篇OpenCV1.0读取摄像头失败解决

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: