linux c 读取并处理文件夹下的所有文件
来源:互联网 发布:淘宝你已参加图片保护 编辑:程序博客网 时间:2024/05/16 14:02
定义传递参数使用的结构体:头文件<param.h>
#ifndef _PARAM_H_#define _PARAM_H_typedef struct str_1_param{ char *str; void *param;} STR_1_PARAM, *pSTR_1_PARAM;#endif
遍历并处理每个文件(指针函数作为参数传递进来现,具体负责处理文件): <procdir.h>
#include <dirent.h>#include <stdio.h>#include <string.h>#include "param.h"//#include <unistd.h>int procdir(char *base, void (*p)(void*), void *param, int isRecursive){ struct dirent *entry = NULL, **namelist; char path[1000]; int num; num = scandir(base, &namelist, NULL, alphasort); if (num<0) { printf("Open dir %s failed!\n", base); return -1; } else { int i; for(i=0;i<num;i++) { entry = namelist[i]; if(strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") ==0) { continue; } else if(entry->d_type == 8) //file { //process the file memset(path, '\0', sizeof(path)); sprintf(path, "%s/%s", base, entry->d_name); ((STR_1_PARAM*)param)->str = path; (*p)(param); } else if(isRecursive && entry->d_type == 4) //directory { //process dir memset(path, '\0', sizeof(path)); sprintf(path, "%s/%s", base, entry->d_name); procdir(path, p, param, isRecursive); } } } return 1;}
使用方法:遍历文件夹下图片,提起hog特征:
#include <stdio.h>#include <getopt.h>#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<float> 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;i<my_param->descriptors.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;}
0 0
- linux c 读取并处理文件夹下的所有文件
- Linux C 读取文件夹下所有文件(包括子文件夹)的文件名
- Linux C 读取文件夹下所有文件(包括子文件夹)的文件名
- Linux C 读取文件夹下所有文件(包括子文件夹)的文件名
- Linux C 读取文件夹下所有文件(包括子文件夹)的文件名(转载)
- Linux C 读取文件夹下所有文件(包括子文件夹)的文件名
- Linux C 读取文件夹下所有文件(包括子文件夹)的文件名
- 获得并处理一个文件夹下的所有文件
- asp.net(C#)读取文件夹和子文件夹下所有文件,绑定到GRIDVIEW并排序
- Java读取文件夹下的文件并进行处理
- VC读取文件夹下的所有文件
- 读取某一文件夹下的所有文件
- VC++读取文件夹下的所有文件
- 读取文件夹下的所有文件
- 读取文件夹下所有的文件
- 读取文件夹下的所有文件
- 读取某个文件夹下的所有文件
- 读取某个文件夹下的所有文件
- Java 高新技术(类加载器)
- 分析minix3之中CPU是怎样在各进程之间切换
- 第五届蓝桥杯练习系统往届试题公式求解试题及参考答案---田野上的稻草人
- no suitable method found to override
- sscanf_s的使用
- linux c 读取并处理文件夹下的所有文件
- OC学习笔记之OC类的设计练习实战
- 如何在ubuntu1404下安装WineQQ2013
- UEditor入门(一)集成进Java Web项目
- nefu 677 以前真没这样用过,,,
- HTTP 状态代码
- 推桌子
- Andorid中的权限大全
- PE文件简介