diff c/InputFrameListModule.cpp @ 399:c389fae9689a

Added a class to read list of image instead of video. This is controlled by the use of the database-filename and folder-data parameters in the config file.
author Jean-Philippe Jodoin <jpjodoin@gmail.com>
date Mon, 29 Jul 2013 17:12:45 -0400
parents
children 7ef1071e3cc3
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/c/InputFrameListModule.cpp	Mon Jul 29 17:12:45 2013 -0400
@@ -0,0 +1,73 @@
+#include "InputFrameListModule.h"
+#include <fstream>
+#include <ostream>
+
+#include "opencv2/core/core.hpp"
+#include "opencv2/highgui/highgui.hpp"
+
+InputFrameListModule::InputFrameListModule(const std::string& basePath, const std::string& pictureList)
+: mInit(false)
+, mBasePath(basePath+"/")
+, mCurrentIdx(0)
+{
+	loadFileList(pictureList);
+}
+InputFrameListModule::~InputFrameListModule()
+{
+
+}
+
+
+
+bool InputFrameListModule::getNextFrame(cv::Mat& mat)
+{
+	bool success = false;
+	if(mCurrentIdx < mFileList.size())
+	{
+		const std::string& fileName = mBasePath+mFileList[mCurrentIdx++];
+		mCurrentFrame = cv::imread(fileName);
+
+		if(!mCurrentFrame.empty())
+			success = true;
+		mat = mCurrentFrame;
+	}
+
+	
+	return success;
+}
+
+
+
+
+
+unsigned int InputFrameListModule::getNbFrames()
+{
+	return mFileList.size();
+}
+
+void InputFrameListModule::loadFileList(const std::string& path)
+{
+	std::ifstream inputFile(mBasePath+path.c_str());
+	std::string fileContains;
+	if (inputFile.is_open())
+	{
+
+		std::string str;					
+		while( !inputFile.eof() )
+		{
+			std::getline(inputFile, str);
+			if (str.empty()) 
+				break;
+			if (str.at(0) == '#' ) 
+				continue; /* comment */
+			mFileList.push_back(str);
+		}
+		
+		if(!mFileList.empty())
+		{
+			cv::Mat tmpImg = cv::imread(mBasePath+mFileList[0]);
+			mSize = cv::Size(tmpImg.cols, tmpImg.rows);
+			mInit = true;
+		}
+	}
+}
\ No newline at end of file