123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260 |
- // This file is part of OpenCV project.
- // It is subject to the license terms in the LICENSE file found in the top-level directory
- // of this distribution and at http://opencv.org/license.html.
- #include "test_precomp.hpp"
- namespace opencv_test { namespace {
- TEST(Imgproc_IntersectConvexConvex, no_intersection)
- {
- std::vector<cv::Point> convex1;
- convex1.push_back(cv::Point(290, 126));
- convex1.push_back(cv::Point(284, 132));
- convex1.push_back(cv::Point(281, 133));
- convex1.push_back(cv::Point(256, 124));
- convex1.push_back(cv::Point(249, 116));
- convex1.push_back(cv::Point(234, 91));
- convex1.push_back(cv::Point(232, 86));
- convex1.push_back(cv::Point(232, 79));
- convex1.push_back(cv::Point(251, 69));
- convex1.push_back(cv::Point(257, 68));
- convex1.push_back(cv::Point(297, 85));
- convex1.push_back(cv::Point(299, 87));
- std::vector<cv::Point> convex2;
- convex2.push_back(cv::Point(192, 236));
- convex2.push_back(cv::Point(190, 245));
- convex2.push_back(cv::Point(177, 260));
- convex2.push_back(cv::Point(154, 271));
- convex2.push_back(cv::Point(142, 270));
- convex2.push_back(cv::Point(135, 263));
- convex2.push_back(cv::Point(131, 254));
- convex2.push_back(cv::Point(132, 240));
- convex2.push_back(cv::Point(172, 213));
- convex2.push_back(cv::Point(176, 216));
- std::vector<cv::Point> intersection;
- float area = cv::intersectConvexConvex(convex1, convex2, intersection);
- EXPECT_TRUE(intersection.empty());
- EXPECT_NEAR(area, 0, std::numeric_limits<float>::epsilon());
- }
- TEST(Imgproc_IntersectConvexConvex, no_intersection_with_1_vertex_on_edge_1)
- {
- std::vector<cv::Point> convex1;
- convex1.push_back(cv::Point(0,0));
- convex1.push_back(cv::Point(740, 0));
- convex1.push_back(cv::Point(740, 540));
- convex1.push_back(cv::Point(0, 540));
- std::vector<cv::Point> convex2;
- convex2.push_back(cv::Point(0, 210));
- convex2.push_back(cv::Point(-30, 210));
- convex2.push_back(cv::Point(-37, 170));
- convex2.push_back(cv::Point(-7, 172));
- std::vector<cv::Point> intersection;
- float area = cv::intersectConvexConvex(convex1, convex2, intersection);
- EXPECT_TRUE(intersection.empty());
- EXPECT_NEAR(area, 0, std::numeric_limits<float>::epsilon());
- }
- TEST(Imgproc_IntersectConvexConvex, no_intersection_with_1_vertex_on_edge_2)
- {
- std::vector<cv::Point> convex1;
- convex1.push_back(cv::Point(0,0));
- convex1.push_back(cv::Point(740, 0));
- convex1.push_back(cv::Point(740, 540));
- convex1.push_back(cv::Point(0, 540));
- std::vector<cv::Point> convex2;
- convex2.push_back(cv::Point(740, 210));
- convex2.push_back(cv::Point(750, 100));
- convex2.push_back(cv::Point(790, 250));
- convex2.push_back(cv::Point(800, 500));
- std::vector<cv::Point> intersection;
- float area = cv::intersectConvexConvex(convex1, convex2, intersection);
- EXPECT_TRUE(intersection.empty());
- EXPECT_NEAR(area, 0, std::numeric_limits<float>::epsilon());
- }
- TEST(Imgproc_IntersectConvexConvex, intersection_with_1_vertex_on_edge)
- {
- std::vector<cv::Point> convex1;
- convex1.push_back(cv::Point(0,0));
- convex1.push_back(cv::Point(740, 0));
- convex1.push_back(cv::Point(740, 540));
- convex1.push_back(cv::Point(0, 540));
- std::vector<cv::Point> convex2;
- convex2.push_back(cv::Point(30, 210));
- convex2.push_back(cv::Point(0,210));
- convex2.push_back(cv::Point(7, 172));
- convex2.push_back(cv::Point(37, 170));
- std::vector<cv::Point> intersection;
- float area = cv::intersectConvexConvex(convex1, convex2, intersection);
- std::vector<cv::Point> expected_intersection;
- expected_intersection.push_back(cv::Point(0, 210));
- expected_intersection.push_back(cv::Point(7, 172));
- expected_intersection.push_back(cv::Point(37, 170));
- expected_intersection.push_back(cv::Point(30, 210));
- EXPECT_EQ(intersection, expected_intersection);
- EXPECT_NEAR(area, 1163, std::numeric_limits<float>::epsilon());
- }
- TEST(Imgproc_IntersectConvexConvex, intersection_with_2_vertices_on_edge)
- {
- std::vector<cv::Point> convex1;
- convex1.push_back(cv::Point(0,0));
- convex1.push_back(cv::Point(740, 0));
- convex1.push_back(cv::Point(740, 540));
- convex1.push_back(cv::Point(0, 540));
- std::vector<cv::Point> convex2;
- convex2.push_back(cv::Point(30, 210));
- convex2.push_back(cv::Point(37, 170));
- convex2.push_back(cv::Point(0,210));
- convex2.push_back(cv::Point(0, 300));
- std::vector<cv::Point> intersection;
- float area = cv::intersectConvexConvex(convex1, convex2, intersection);
- std::vector<cv::Point> expected_intersection;
- expected_intersection.push_back(cv::Point(0, 300));
- expected_intersection.push_back(cv::Point(0, 210));
- expected_intersection.push_back(cv::Point(37, 170));
- expected_intersection.push_back(cv::Point(30, 210));
- EXPECT_EQ(intersection, expected_intersection);
- EXPECT_NEAR(area, 1950, std::numeric_limits<float>::epsilon());
- }
- TEST(Imgproc_IntersectConvexConvex, intersection_1)
- {
- std::vector<cv::Point> convex1;
- convex1.push_back(cv::Point(0,0));
- convex1.push_back(cv::Point(740, 0));
- convex1.push_back(cv::Point(740, 540));
- convex1.push_back(cv::Point(0, 540));
- std::vector<cv::Point> convex2;
- convex2.push_back(cv::Point(20,210));
- convex2.push_back(cv::Point(30, 210));
- convex2.push_back(cv::Point(37, 170));
- convex2.push_back(cv::Point(7, 172));
- std::vector<cv::Point> intersection;
- float area = cv::intersectConvexConvex(convex1, convex2, intersection);
- std::vector<cv::Point> expected_intersection;
- expected_intersection.push_back(cv::Point(7, 172));
- expected_intersection.push_back(cv::Point(37, 170));
- expected_intersection.push_back(cv::Point(30, 210));
- expected_intersection.push_back(cv::Point(20, 210));
- EXPECT_EQ(intersection, expected_intersection);
- EXPECT_NEAR(area, 783, std::numeric_limits<float>::epsilon());
- }
- TEST(Imgproc_IntersectConvexConvex, intersection_2)
- {
- std::vector<cv::Point> convex1;
- convex1.push_back(cv::Point(0,0));
- convex1.push_back(cv::Point(740, 0));
- convex1.push_back(cv::Point(740, 540));
- convex1.push_back(cv::Point(0, 540));
- std::vector<cv::Point> convex2;
- convex2.push_back(cv::Point(-2,210));
- convex2.push_back(cv::Point(-5, 300));
- convex2.push_back(cv::Point(37, 150));
- convex2.push_back(cv::Point(7, 172));
- std::vector<cv::Point> intersection;
- float area = cv::intersectConvexConvex(convex1, convex2, intersection);
- std::vector<cv::Point> expected_intersection;
- expected_intersection.push_back(cv::Point(0, 202));
- expected_intersection.push_back(cv::Point(7, 172));
- expected_intersection.push_back(cv::Point(37, 150));
- expected_intersection.push_back(cv::Point(0, 282));
- EXPECT_EQ(intersection, expected_intersection);
- EXPECT_NEAR(area, 1857.19836425781, std::numeric_limits<float>::epsilon());
- }
- TEST(Imgproc_IntersectConvexConvex, intersection_3)
- {
- std::vector<cv::Point> convex1;
- convex1.push_back(cv::Point(15, 0));
- convex1.push_back(cv::Point(740, 0));
- convex1.push_back(cv::Point(740, 540));
- convex1.push_back(cv::Point(15, 540));
- std::vector<cv::Point> convex2;
- convex2.push_back(cv::Point(0,210));
- convex2.push_back(cv::Point(30, 210));
- convex2.push_back(cv::Point(37, 170));
- convex2.push_back(cv::Point(7, 172));
- std::vector<cv::Point> intersection;
- float area = cv::intersectConvexConvex(convex1, convex2, intersection);
- std::vector<cv::Point> expected_intersection;
- expected_intersection.push_back(cv::Point(15, 171));
- expected_intersection.push_back(cv::Point(37, 170));
- expected_intersection.push_back(cv::Point(30, 210));
- expected_intersection.push_back(cv::Point(15, 210));
- EXPECT_EQ(intersection, expected_intersection);
- EXPECT_NEAR(area, 723.866760253906, std::numeric_limits<float>::epsilon());
- }
- TEST(Imgproc_IntersectConvexConvex, intersection_4)
- {
- std::vector<cv::Point> convex1;
- convex1.push_back(cv::Point(15, 0));
- convex1.push_back(cv::Point(740, 0));
- convex1.push_back(cv::Point(740, 540));
- convex1.push_back(cv::Point(15, 540));
- std::vector<cv::Point> convex2;
- convex2.push_back(cv::Point(15, 0));
- convex2.push_back(cv::Point(740, 0));
- convex2.push_back(cv::Point(740, 540));
- convex2.push_back(cv::Point(15, 540));
- std::vector<cv::Point> intersection;
- float area = cv::intersectConvexConvex(convex1, convex2, intersection);
- std::vector<cv::Point> expected_intersection;
- expected_intersection.push_back(cv::Point(15, 0));
- expected_intersection.push_back(cv::Point(740, 0));
- expected_intersection.push_back(cv::Point(740, 540));
- expected_intersection.push_back(cv::Point(15, 540));
- EXPECT_EQ(intersection, expected_intersection);
- EXPECT_NEAR(area, 391500, std::numeric_limits<float>::epsilon());
- }
- } // namespace
- } // opencv_test
|