Commit 08b73def2f0e365c7bbcfc4f2557b78855890565

Authored by Scott Klum
1 parent bbc43870

Generalized the raw format

Showing 1 changed file with 9 additions and 35 deletions
openbr/plugins/format/raw.cpp
@@ -26,49 +26,25 @@ namespace br @@ -26,49 +26,25 @@ namespace br
26 * \ingroup formats 26 * \ingroup formats
27 * \brief RAW format 27 * \brief RAW format
28 * 28 *
29 - * \br_link http://www.nist.gov/srd/nistsd27.cfm  
30 - * \author Josh Klontz \cite jklontz 29 + * \author Scott Klum \cite sklum
31 */ 30 */
32 class rawFormat : public Format 31 class rawFormat : public Format
33 { 32 {
34 Q_OBJECT 33 Q_OBJECT
35 - static QHash<QString, QHash<QString,QSize> > imageSizes; // QHash<Path, QHash<File,Size> >  
36 34
37 Template read() const 35 Template read() const
38 { 36 {
39 - QString path = file.path();  
40 - if (!imageSizes.contains(path)) {  
41 - static QMutex mutex;  
42 - QMutexLocker locker(&mutex);  
43 -  
44 - if (!imageSizes.contains(path)) {  
45 - const QString imageSize = path+"/ImageSize.txt";  
46 - QStringList lines;  
47 - if (QFileInfo(imageSize).exists()) {  
48 - lines = QtUtils::readLines(imageSize);  
49 - lines.removeFirst(); // Remove header  
50 - }  
51 -  
52 - QHash<QString,QSize> sizes;  
53 - QRegExp whiteSpace("\\s+");  
54 - foreach (const QString &line, lines) {  
55 - QStringList words = line.split(whiteSpace);  
56 - if (words.size() != 3) continue;  
57 - sizes.insert(words[0], QSize(words[2].toInt(), words[1].toInt()));  
58 - }  
59 -  
60 - imageSizes.insert(path, sizes);  
61 - }  
62 - }  
63 -  
64 QByteArray data; 37 QByteArray data;
65 QtUtils::readFile(file, data); 38 QtUtils::readFile(file, data);
66 39
67 - QSize size = imageSizes[path][file.baseName()];  
68 - if (!size.isValid()) size = QSize(800,768);  
69 - if (data.size() != size.width() * size.height())  
70 - qFatal("Expected %d*%d bytes, got %d.", size.height(), size.width(), data.size());  
71 - return Template(file, Mat(size.height(), size.width(), CV_8UC1, data.data()).clone()); 40 + // The raw file format has no header information, so one must specify resolution
  41 + QSize size = size = QSize(file.get<int>("width"),file.get<int>("height"));
  42 + Template t(file);
  43 + QList<Mat> matrices;
  44 + const int bytes = size.width()*size.height();
  45 + for (int i=0; i<data.size()/(size.height()*size.width()); i++)
  46 + t.append(Mat(size.height(), size.width(), CV_8UC1, data.data()+bytes*i).clone());
  47 + return t;
72 } 48 }
73 49
74 void write(const Template &t) const 50 void write(const Template &t) const
@@ -77,8 +53,6 @@ class rawFormat : public Format @@ -77,8 +53,6 @@ class rawFormat : public Format
77 } 53 }
78 }; 54 };
79 55
80 -QHash<QString, QHash<QString,QSize> > rawFormat::imageSizes;  
81 -  
82 BR_REGISTER(Format, rawFormat) 56 BR_REGISTER(Format, rawFormat)
83 57
84 } // namespace br 58 } // namespace br