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

在做计算机视觉的研究中,很多测试样本提供的都是图像序列,那么怎样在不保存一个个图像名的情况下,读入一个文件夹下的图像序列,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);
}
时间: 2024-11-21 00:39:50

如何读入文件下的图像序列的相关文章

混合高斯背景建模

在运动目标检测提取中,背景目标对于目标的识别和跟踪至关重要.而建模正是背景目标提取的一个重要环节. 前景是指在假设背景为静止的情况下,任何有意义的运动物体即为前景. 运动物体检测的问题主要分为两类,摄像机固定和摄像机运动.对于摄像机运动的运动物体检测问题,比较著名的解决方案是光流法,通过求解偏微分方程求的图像序列的光流场,从而预测摄像机的运动状态.对于摄像机固定的情形,当然也可以用光流法,但是由于光流法的复杂性,往往难以实时的计算.而混合高斯背景建模适合于在摄像机固定的情况下从图像序列中分离出背

linux下logrotate 配置和理解

对于Linux 的系统安全来说,日志文件是极其重要的工具.系统管理员可以使用logrotate 程序用来管理系统中的最新的事件,对于Linux 的系统安全来说,日志文件是极其重要的工具.系统管理员可以使用logrotate 程序用来管理系统中的最新的事件.logrotate 还可以用来备份日志文件,本篇将通过以下几部分来介绍 日志文件的管理:1.logrotate 配置2.缺省配置 logrotate3.使用include 选项读取其他配置文件4.使用include 选项覆盖缺省配置5.为指定的

linux下vi命令大全

进入vi的命令 vi filename :打开或新建文件,并将光标置于第一行首 vi +n filename :打开文件,并将光标置于第n行首 vi + filename :打开文件,并将光标置于最后一行首 vi +/pattern filename:打开文件,并将光标置于第一个与pattern匹配的串处 vi -r filename :在上次正用vi编辑时发生系统崩溃,恢复filename vi filename....filename :打开多个文件,依次进行编辑 移动光标类命令h :光标左

linux下vi命令大全 转

进入vi的命令 vi filename :打开或新建文件,并将光标置于第一行首 vi +n filename :打开文件,并将光标置于第n行首 vi + filename :打开文件,并将光标置于最后一行首 vi +/pattern filename:打开文件,并将光标置于第一个与pattern匹配的串处 vi -r filename :在上次正用vi编辑时发生系统崩溃,恢复filename vi filename....filename :打开多个文件,依次进行编辑 移动光标类命令h :光标左

DELPHI下API简述(1800个API)

DELPHI下API简述 http://zero.cnbct.org/show.asp?id=144 auxGetDevCaps API 获取附属设备容量 auxGetNumDevs API 返回附属设备数量 auxGetVolume API 获取当前卷设置 auxOutMessage API 向输出设备发送消息 auxSetVolume API 设置附属设备卷 AbortDoc API 终止一项打印作业 AbortPath API 终止或取消DC中的一切路径 AbortPrinter API

estore商城案例(二)------登录&amp;添加商品&amp;商品列表(下)

撸完了登录模块,接着撸商品添加,和商品列表模块: 先亮出数据库: 1 DROP TABLE IF EXISTS products; 2 CREATE TABLE products ( 3 id varchar(100) NOT NULL, 4 name varchar(100) DEFAULT NULL, 5 price double DEFAULT NULL, 6 category varchar(100) DEFAULT NULL, 7 pnum int(11) DEFAULT NULL,

Linux下Gvim 的基本操作-适合新手看

Linux下Gvim 的基本操作 vi 有三种方式 编辑方式 插入方式 命令方式在命令方式下,所有命令以“:”开始,所键入的字符系统均作为命令处理在命令方式下,按下i就会进入插入模式,用户输入的可视字符都添加到文件中,按下Esc键,就回到命令状态 基本命令光标命令:k,j,h,l-----上下左右移动光标nG-------跳转命令.n为行数,该命令立即跳转到指定的行Ctrl+G -----报告光标所在位置的行数和列数w,b----- 使光标向前或者向后跳过一个单词 编辑命令:i,a,r----在

【Linux】linux下vi命令大全

进入vi的命令 vi filename :打开或新建文件,并将光标置于第一行首 vi +n filename :打开文件,并将光标置于第n行首 vi + filename :打开文件,并将光标置于最后一行首 vi +/pattern filename:打开文件,并将光标置于第一个与pattern匹配的串处 vi -r filename :在上次正用vi编辑时发生系统崩溃,恢复filename vi filename....filename :打开多个文件,依次进行编辑 移动光标类命令h :光标左

linux下vi命令(转)

进入vi的命令 vi filename :打开或新建文件,并将光标置于第一行首 vi +n filename :打开文件,并将光标置于第n行首 vi + filename :打开文件,并将光标置于最后一行首 vi +/pattern filename:打开文件,并将光标置于第一个与pattern匹配的串处 vi -r filename :在上次正用vi编辑时发生系统崩溃,恢复filename vi filename....filename :打开多个文件,依次进行编辑 移动光标类命令h :光标左