Commit dfc6f1cff693d4f9c025a584a5c90f80babdc8ac

Authored by Scott Klum
1 parent eb20e848

Contraining bounding boxes to be a valid size when using roi

openbr/plugins/crop.cpp
... ... @@ -49,6 +49,24 @@ class CropTransform : public UntrainableTransform
49 49  
50 50 BR_REGISTER(Transform, CropTransform)
51 51  
  52 +
  53 +static QRectF constrainRect(int height, int width, const QRectF &rect)
  54 +{
  55 + QRectF newRect = rect;
  56 +
  57 + // roi.x + roi.width <= m.cols && roi.y + roi.height <= m.rows
  58 +
  59 + if (rect.x() < 0) newRect.setX(0);
  60 + if (rect.y() < 0) newRect.setY(0);
  61 +
  62 + if ((newRect.y() + rect.width()) > width) newRect.setWidth(width-newRect.y());
  63 + if ((newRect.x() + rect.height()) > height) newRect.setHeight(height-newRect.x());
  64 +
  65 + qDebug() << ((newRect.x() + newRect.width()) <= width) << ((newRect.y() + newRect.height()) <= height);
  66 +
  67 + return newRect;
  68 +}
  69 +
52 70 /*!
53 71 * \ingroup transforms
54 72 * \brief Crops the rectangular regions of interest.
... ... @@ -63,11 +81,13 @@ class ROITransform : public UntrainableTransform
63 81 void project(const Template &src, Template &dst) const
64 82 {
65 83 if (!propName.isEmpty()) {
66   - QRectF rect = src.file.get<QRectF>(propName);
  84 + QRectF rect = constrainRect(src.m().rows, src.m().cols, src.file.get<QRectF>(propName));
67 85 dst += src.m()(OpenCVUtils::toRect(rect));
68 86 } else if (!src.file.rects().empty()) {
69   - foreach (const QRectF &rect, src.file.rects())
70   - dst += src.m()(OpenCVUtils::toRect(rect));
  87 + foreach (const QRectF &rect, src.file.rects()) {
  88 + QRectF newRect = constrainRect(src.m().rows, src.m().cols, rect);
  89 + dst += src.m()(OpenCVUtils::toRect(newRect));
  90 + }
71 91 } else if (src.file.contains(QStringList() << "X" << "Y" << "Width" << "Height")) {
72 92 dst += src.m()(Rect(src.file.get<int>("X"),
73 93 src.file.get<int>("Y"),
... ...
openbr/plugins/landmarks.cpp
... ... @@ -372,7 +372,7 @@ BR_REGISTER(Transform, ReadLandmarksTransform)
372 372 * \brief Name a point/rect
373 373 * \author Scott Klum \cite sklum
374 374 */
375   -class NameLandmarkTransform : public UntrainableMetadataTransform
  375 +class NameLandmarksTransform : public UntrainableMetadataTransform
376 376 {
377 377 Q_OBJECT
378 378 Q_PROPERTY(bool point READ get_point WRITE set_point RESET reset_point STORED false)
... ... @@ -406,14 +406,14 @@ class NameLandmarkTransform : public UntrainableMetadataTransform
406 406 }
407 407 };
408 408  
409   -BR_REGISTER(Transform, NameLandmarkTransform)
  409 +BR_REGISTER(Transform, NameLandmarksTransform)
410 410  
411 411 /*!
412 412 * \ingroup transforms
413 413 * \brief Remove a name from a point/rect
414 414 * \author Scott Klum \cite sklum
415 415 */
416   -class AnonymizeLandmarkTransform : public UntrainableMetadataTransform
  416 +class AnonymizeLandmarksTransform : public UntrainableMetadataTransform
417 417 {
418 418 Q_OBJECT
419 419 Q_PROPERTY(bool point READ get_point WRITE set_point RESET reset_point STORED false)
... ... @@ -435,7 +435,7 @@ class AnonymizeLandmarkTransform : public UntrainableMetadataTransform
435 435 }
436 436 };
437 437  
438   -BR_REGISTER(Transform, AnonymizeLandmarkTransform)
  438 +BR_REGISTER(Transform, AnonymizeLandmarksTransform)
439 439  
440 440 } // namespace br
441 441  
... ...