• 如何读入文件下的图像序列


    在做计算机视觉的研究中,很多测试样本提供的都是图像序列,那么怎样在不保存一个个图像名的情况下,读入一个文件夹下的图像序列,window下提高能够了一个很好的方法。

    首先我们先了解下WIN32_FIND_DATA的结构。

    WIN32_FIND_DATA结构描述了一个有FindFirsFile,FindFirstFileEx,或FindNextFile函数查找到的文件信息,其定义结构如下:

    typedef struct_WIN32_FIND_DATA{
        DWORD dwFileAttributes;//文件属性
      FILETIME ftCreationTime;//文件创建时间
      FILETIME ftLastAccessTime;//文件最后一次访问时间
      FILETIME ftLastWriteTime;//文件最后一次修改时间
      DWORD nFileSizeHight;//文件长度高32位
      DWORD nFileSizeLow;//文件长度低32位
      DWORD dwReserved0;//系统保留
      DWORD dwReserved1;//系统保留
      TCHAR cFileName[MAX_PATH];//长文件名
      TCHAR cAltemateFileName[14];//8.3文件格式名
    } WIN32_FIND_DATA,*PWN32_FIND_DATA;

    可以通过FindFirstFile()函数根据当前的文件存放路径查找该文件来把操作文件的相关属性读到WIN32_FIND_DATA结构体中去;如下

    WIN32_FIND_DATA f;

    HANDLE hFind = FindFirstFile(".\data",&f);

    在使用这个结构体时不能手工谢盖这个结构体中的任何数据,结构体对于开发人员来说只能作为一个只读数据,其所有的成员变量都是由系统完成填写。在MSDN帮助中可以查找出WIN32_FIND_DATA结构的更加详细的信息。

    if(findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)

    这个判断语句是通过 将dwFileAttributes和FILE_ATTRIBUTE_DIRECTORY做位的与运算 
    来判断所找到的项目是不是文件夹

    因为 FindFirstFile返回的 findData 中 dwFileAttributes项的值

    可能是 
    FILE_ATTRIBUTE_ARCHIVE 
    FILE_ATTRIBUTE_COMPRESSED 
    FILE_ATTRIBUTE_DIRECTORY 
    FILE_ATTRIBUTE_HIDDEN 
    FILE_ATTRIBUTE_NORMAL 
    FILE_ATTRIBUTE_OFFLINE 
    FILE_ATTRIBUTE_READONLY 
    FILE_ATTRIBUTE_SYSTEM 
    FILE_ATTRIBUTE_TEMPORARY 
    中几项的组合值

    findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY 
    的结果只能是两种: 
    FILE_ATTRIBUTE_DIRECTORY 非零值 ,if条件是真 
    0 ,if条件是假

    通过 findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY 
    可以判断 dwFileAttributes项的值中是否 FILE_ATTRIBUTE_DIRECTORY,即判断所找到的项目是不是文件夹

    这种对位运算结果的判断,在windows编程中有很多 
    如窗体属性,鼠标按键

     下面将给出window下打开文件下的图像序列的程序

    /* 在VS2012下要用下面的方式读入图像组,就要在头文件中加入<windows.h>
     * 另外还会提示char* 与LPCTSTR 不兼容,需要变成w_char
     * 解决方式就是在项目属性中的常规下的字符集中的使用Unicode选项变成使用多字节字符集
     */

    void
    readImageSequenceFiles(char* imgFilePath,vector <string> &imgNames) { imgNames.clear(); char tmpDirSpec[MAX_PATH+1]; sprintf (tmpDirSpec, "%s/*", imgFilePath);//*任意文件名 //size_t len = strlen(tmpDirSpec) + 1;//将char* 类型转换成wchar_t类型; //size_t converted = 0; //wchar_t *WStr; //WStr=(wchar_t*)malloc(len*sizeof(wchar_t)); //mbstowcs_s(&converted, WStr, len, tmpDirSpec, _TRUNCATE); WIN32_FIND_DATA f; //根据当前文件的存放路径查找该文件来把待操作文件的相关属性读到f中 HANDLE h = FindFirstFile(tmpDirSpec , &f); if(h != INVALID_HANDLE_VALUE) { FindNextFile(h, &f); //read .. FindNextFile(h, &f); //read . do { imgNames.push_back(f.cFileName); } while(FindNextFile(h, &f)); } FindClose(h); }

     

  • 相关阅读:
    RDA安装
    关闭SELinux
    Linux下开启关闭防火墙
    长事务管理
    增加复制表
    Python使用property函数定义的属性名与其他实例变量重名会怎么样?
    Python使用property函数定义属性访问方法如果不定义fget会怎么样?
    Python使用property函数和使用@property装饰器定义属性访问方法的异同点分析
    第8.18节 Python类中内置析构方法__del__
    Python中的列表解析和列表推导是一回事吗?
  • 原文地址:https://www.cnblogs.com/lxy2017/p/4115646.html
Copyright © 2020-2023  润新知