view c/test_feature.cpp @ 372:349eb1e09f45

Cleaned the methods/functions indicating if a point is in a polygon In general, shapely should be used, especially for lots of points: from shapely.geometry import Polygon, Point poly = Polygon(array([[0,0],[0,1],[1,1],[1,0]])) p = Point(0.5,0.5) poly.contains(p) -> returns True poly.contains(Point(-1,-1)) -> returns False You can convert a moving.Point to a shapely point: p = moving.Point(1,2) p.asShapely() returns the equivalent shapely point If you have several points to test, use moving.pointsInPolygon(points, polygon) where points are moving.Point and polygon is a shapely polygon.
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Tue, 16 Jul 2013 17:00:17 -0400
parents f0f800b95765
children b6ad86ee7033
line wrap: on
line source

#define CATCH_CONFIG_MAIN

#include "Motion.hpp"
#include "testutils.hpp"

#include "opencv2/core/core.hpp"

#include "catch.hpp"

using namespace std;
using namespace cv;

TEST_CASE("features/similarity", "test feature similarity measure") {
  FeatureTrajectoryPtr ft1 = createFeatureTrajectory(1, 10, 20, Point2f(1,1), Point2f(0, 1));
  FeatureTrajectoryPtr ft2 = createFeatureTrajectory(2, 10, 20, Point2f(2,1), Point2f(0, 1));

  REQUIRE_FALSE(ft1->minMaxSimilarity(*ft2, 10, 20, 0.5, 0.1));
  REQUIRE(ft1->minMaxSimilarity(*ft2, 10, 20, 1, 0.1));

  ft2 = createFeatureTrajectory(2, 10, 19, Point2f(1,1), Point2f(0, 1));
  Mat homography;
  ft2->addPoint(20, Point2f(1,11.5), homography);
  
  REQUIRE_FALSE(ft1->minMaxSimilarity(*ft2, 10, 20, 0, 0.4));
  REQUIRE(ft1->minMaxSimilarity(*ft2, 10, 20, 0, 0.5));
}