Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选 PDF转换器

首页 / 操作系统 / Linux / Linux C读取并处理文件夹下的所有文件

Linux C读取并处理文件夹下的所有文件,定义传递参数使用的结构体:头文件<param.h>Linux C程序内存泄露检测 http://www.linuxidc.com/Linux/2014-03/98740.htmLinux C中如何定义可变参数的宏 http://www.linuxidc.com/Linux/2014-03/98663.htm#ifndef _PARAM_H_
#define _PARAM_H_typedef struct str_1_param
{
    char *str;
    void *param;
} STR_1_PARAM, *pSTR_1_PARAM;#endif使用方法:遍历文件夹下图片,提起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, " ");
    cvReleaseImage(&my_param->img);
}int main(int argc, char **argv)
{
    if(argc != 5 )
    {
        printf("Usage: %s [-d InputBaseDir] [-o OutputFile] ", 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! ", 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;
   
&nbsp;&nbsp;  int rval = procdir(base, extr_hog, &str1param, 1);    fclose(pOutFile);    return 0;
}本文永久更新链接地址:http://www.linuxidc.com/Linux/2014-05/101235.htm