diff --git a/openbr/plugins/io/write.cpp b/openbr/plugins/io/write.cpp index 67f9d11..7b88966 100644 --- a/openbr/plugins/io/write.cpp +++ b/openbr/plugins/io/write.cpp @@ -10,6 +10,11 @@ namespace br * \ingroup transforms * \brief Write all mats to disk as images. * \author Brendan Klare \cite bklare + * \br_property QString outputDirectory Top level directory to write images to. + * \br_property QString underscore + * \br_property QString imgExtension Extension to save images as. + * \br_property int padding Zero pad the image filenames. + * \br_property QString subDir Optional group images by a metadata key in subdirectories. */ class WriteTransform : public TimeVaryingTransform { @@ -18,12 +23,15 @@ class WriteTransform : public TimeVaryingTransform Q_PROPERTY(QString underscore READ get_underscore WRITE set_underscore RESET reset_underscore STORED false) Q_PROPERTY(QString imgExtension READ get_imgExtension WRITE set_imgExtension RESET reset_imgExtension STORED false) Q_PROPERTY(int padding READ get_padding WRITE set_padding RESET reset_padding STORED false) + Q_PROPERTY(QString subDir READ get_subDir WRITE set_subDir RESET reset_subDir STORED false) BR_PROPERTY(QString, outputDirectory, "Temp") BR_PROPERTY(QString, underscore, "") BR_PROPERTY(QString, imgExtension, "jpg") BR_PROPERTY(int, padding, 5) + BR_PROPERTY(QString, subDir, "") int cnt; + QMap numImages; void init() { cnt = 0; @@ -34,10 +42,18 @@ class WriteTransform : public TimeVaryingTransform void projectUpdate(const Template &src, Template &dst) { dst = src; - QString path = QString("%1/image%2%3.%4").arg(outputDirectory).arg(cnt++, padding, 10, QChar('0')).arg(underscore.isEmpty() ? "" : "_" + underscore).arg(imgExtension); - OpenCVUtils::saveImage(dst.m(), path); + if (!subDir.isEmpty()) { + QString dir = src.file.get(subDir, "Temp"); + QString path = QString("%1/%2/").arg(outputDirectory, dir); + int value = numImages.value(dir, 0); + path += QString("%1_%2.%3").arg(src.file.get(subDir, "Image")).arg(value, padding, 10, QChar('0')).arg(imgExtension); + numImages[dir] = ++value; + OpenCVUtils::saveImage(dst.m(), path); + } else { + QString path = QString("%1/image%2%3.%4").arg(outputDirectory).arg(cnt++, padding, 10, QChar('0')).arg(underscore.isEmpty() ? "" : "_" + underscore).arg(imgExtension); + OpenCVUtils::saveImage(dst.m(), path); + } } - }; BR_REGISTER(Transform, WriteTransform)