opencv对图片进行批处理

守給你的承諾、 提交于 2019-12-06 00:02:16

//先用_findfirst查找第一个文件,若成功则用返回的句柄调用_findnext函数查找其他的文件,当查找完毕后用,用_findclose函数结束查找。

#include<opencv2/opencv.hpp>

#include <stdio.h>

#include <io.h>

#include<iostream>

#include<time.h>

#include<fstream>

using namespace std;

using namespace cv;

 

const char *to_search = "F: \\RIDH2\\*.png";    //欲查找的文件,支持通配符

char *nameList_txt = "F: \\RIDH2\\train_list.txt";

FILE *fp;

int main()

{

         //1、生成所有png文件名称的txt文本

         errno_t err;

         intptr_t handle;            //用于查找的句柄;x64环境下,句柄也在变化,要用_int64 定义句柄,而不是long。  intptr_t是为了跨平台,其长度总是所在平台的位数,所以用来存放地址。       

         struct _finddata_t fileinfo;                                     //文件信息的结构体       

 

                                                                                                                                                                //fp= fopen("F:\\LiuHuan_File\\RIDH2\\train_list2.txt", "w+");此程序会报错

 

         if ((err = fopen_s(&fp, nameList_txt, "w+")) != 0)    //对于fopen_s来说,打开文件成功返回0,失败返回非0。

         {

                   printf("can't open file\n");

                   return 0;

         }

         handle = _findfirst(to_search, &fileinfo);                          //第一次查找             如果查找成功的话,将返回一个intptr_t型的唯一的查找用的句柄(就是一个唯一编号)。 若失败,则返回-1。

         if (-1 == handle)

                   return -1;

         //fprintf(fp,"positive/%s 0\r",fileinfo.name);                 //打印出找到的文件的文件名

         fprintf(fp, "%s\n", fileinfo.name);

         while (!_findnext(handle, &fileinfo))                              //搜索与_findfirst函数提供的文件名称匹配的下一个实例,若成功则返回0,否则返回-1

         {

                   //fprintf(fp,"positive/%s 0\r",fileinfo.name);

                   fprintf(fp, "%s\n", fileinfo.name);                 //把格式化字符串输出到指定文件中

         }

         _findclose(handle);                                              //关闭句柄           

         fclose(fp);

         //system("pause");   

 

         //2、将txt中的文件名称取出,利用sprintf得到png文件的路径

         ifstream file;

         file.open(nameList_txt);

 

         int img_index = 0;

         while (!file.eof())   //判断当前文件指针位置,是否处于文件结束位置

         {

                   char txt_cont[20];

                   file.getline(txt_cont, 20);    //读取file中一行数据,存放于txt_cont;

                   char img_file[200], save_file[200];

 

                   if (strlen(txt_cont)<1)    //上面生成的nameList_txt中尾部多了\n,不知道有没有更好的方法

                   {

                            break;

                   }

                   sprintf(img_file, "F: \\RIDH2\\%s", txt_cont);  //sprintf把格式化字符串输出到指定字符串

                   Mat src = imread(img_file);

                   Mat dst;

                   //cvtColor(src, dst, CV_BGR2GRAY);

                   /*sprintf(save_file, "F:\\LiuHuan_File\\RIDH1\\save\\%s", img_index);

                   img_index++;*/

 

                   sprintf(save_file, "F: \\RIDH2\\save\\%s", txt_cont);

                   imwrite(save_file, src);

 

         }

         printf("output done.\n");

         return 0;

}

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!