Online Multi-Person Tracking 文章源码中 在Windows 操作系统下 基于OpenCV的图像序列读取方法(代码)
第一部分
char tmpDirSpec[MAX_PATH+1];
sprintf_s(tmpDirSpec, "%s*", _directory.c_str());
#if OS_type==2 // for windows
WIN32_FIND_DATAA f;
HANDLE h = FindFirstFileA(tmpDirSpec , &f); // read . 寻找目录下的第一个文件 返回给 f
if(h != INVALID_HANDLE_VALUE)
{
FindNextFileA(h, &f); //read ..
while(FindNextFileA(h, &f))
_m_fileNames.push_back(f.cFileName);
}
FindClose(h);
其中数据结构解释
vector<string>_m_fileNames;
_directory 为图像序列路径,作为参数输入 (注意路径下划线的使用 路径最后必须加下划线 例:C:\View_001\ C:/View_001/) 在文章源码中左右下划线都可(别的项目不能确定)在路径末尾必须加下划线
WIN32_FIND_DATAA 在用findfirst()和findnext()函数去查找磁盘文件时经常使用的一个数据结构WIN32_FIND_DATA的成员变量里包含了以上所有的文件属性,因此可以通过这个结构作为获取或更改文件属性的手段
HANDLE(句柄) 是Windows操作系统中的一个概念。在Windows程序中,有各种各样的资源(窗口、图标、光标等),系统在创建这些资源时会为它们分配内存,并返回标示这些资源的标示号
代码表示在目标路径 tmpDirSpec中寻找到第一个文件,并将文件的各种属性存储在实例化的数据结构 WIN32_FIND_DATAA f中,当句柄h不是空值时,循环输入,将所有文件的名字 存储在 字符向量 _m_fileNames 中(此时已经将所有的文件按名字存储进了该字符向量中) 以备下面 readImg()函数 循环读入文件使用
第二部分
void ImageDataReader::readImg(Mat& frame) // 将图像读入 frame 中
{
frame.data=NULL;
if (_file_counter>=_m_fileNames.size())
return;
frame=imread(_directory+_m_fileNames[_file_counter]);
_file_counter++;
}
循环读图像序列函数
注意:
路径作为参数输入下划线的使用-路径最后必须加下划线 例:C:\View_001\ C:/View_001/ 在文章源码中左右下划线测试都可 (别的项目不能确定)