diff --git a/openbr/plugins/imgproc/roi.cpp b/openbr/plugins/imgproc/roi.cpp index 40fb92d..ce899fa 100644 --- a/openbr/plugins/imgproc/roi.cpp +++ b/openbr/plugins/imgproc/roi.cpp @@ -41,12 +41,14 @@ class ROITransform : public UntrainableTransform void project(const Template &src, Template &dst) const { - if (!propName.isEmpty()) { + if ((propName == "Rects") || !src.file.rects().empty()) { + foreach (const QRectF &rect, src.file.rects()) + dst += src.m()(OpenCVUtils::toRect(rect)); + } else if (!propName.isEmpty()) { QRectF rect = src.file.get(propName); dst += src.m()(OpenCVUtils::toRect(rect)); } else if (!src.file.rects().empty()) { - foreach (const QRectF &rect, src.file.rects()) - dst += src.m()(OpenCVUtils::toRect(rect)); + } else if (src.file.contains(QStringList() << "X" << "Y" << "Width" << "Height")) { dst += src.m()(Rect(src.file.get("X"), src.file.get("Y"), diff --git a/openbr/plugins/metadata/checkrects.cpp b/openbr/plugins/metadata/checkrects.cpp index c1aeaf0..1471759 100644 --- a/openbr/plugins/metadata/checkrects.cpp +++ b/openbr/plugins/metadata/checkrects.cpp @@ -39,15 +39,15 @@ class CheckRectsTransform : public UntrainableTransform dst.file.clearRects(); QList rects = src.file.rects(); - if (fixRects){ - for (int i=0; i src.m().cols-1) r.moveRight(src.m().cols-1); - if (r.top() < 0) r.moveTop(0); - if (r.bottom() > src.m().rows-1) r.moveBottom(src.m().rows-1); - dst.file.appendRect(r); - } + if (fixRects) { + foreach (QRectF r, rects) + if ((r.height() <= src.m().rows) && (r.width() <= src.m().cols)) /* can't fix rects that don't fit the image */ { + if (r.left() < 0) r.moveLeft(0); + if (r.right() > src.m().cols-1) r.moveRight(src.m().cols-1); + if (r.top() < 0) r.moveTop(0); + if (r.bottom() > src.m().rows-1) r.moveBottom(src.m().rows-1); + dst.file.appendRect(r); + } } else { foreach (QRectF r, rects){ if ((r.left() < 0) || (r.right() > src.m().cols-1) || (r.top() < 0) || (r.bottom() > src.m().rows-1)){ diff --git a/openbr/plugins/metadata/savemat.cpp b/openbr/plugins/metadata/savemat.cpp index 0099bd8..9a303bc 100644 --- a/openbr/plugins/metadata/savemat.cpp +++ b/openbr/plugins/metadata/savemat.cpp @@ -61,7 +61,7 @@ class JustTransform : public UntrainableMetaTransform foreach (const QString &key, keys) if (key == "_Points") { dst.file.setPoints(tmp.file.points()); - } else { + } else if (tmp.file.contains(key)) { dst.file.set(key, tmp.file.value(key)); } }