Advertisement
jack06215

[OpenCV] homography transform

Jul 8th, 2020
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.43 KB | None | 0 0
  1. // Convert a vector of non-homogeneous 2D points to a vector of homogenehous 2D points.
  2. void to_homogeneous(const std::vector< cv::Point2f >& non_homogeneous, std::vector< cv::Point3f >& homogeneous)
  3. {
  4.     homogeneous.resize(non_homogeneous.size());
  5.     for (size_t i = 0; i < non_homogeneous.size(); i++)
  6.     {
  7.         homogeneous[i].x = non_homogeneous[i].x;
  8.         homogeneous[i].y = non_homogeneous[i].y;
  9.         homogeneous[i].z = 1.0;
  10.     }
  11. }
  12.  
  13. // Convert a vector of homogeneous 2D points to a vector of non-homogenehous 2D points.
  14. void from_homogeneous(const std::vector< cv::Point3f >& homogeneous, std::vector< cv::Point2f >& non_homogeneous)
  15. {
  16.     non_homogeneous.resize(homogeneous.size());
  17.     for (size_t i = 0; i < non_homogeneous.size(); i++)
  18.     {
  19.         non_homogeneous[i].x = homogeneous[i].x / homogeneous[i].z;
  20.         non_homogeneous[i].y = homogeneous[i].y / homogeneous[i].z;
  21.     }
  22. }
  23.  
  24. // Transform a vector of 2D non-homogeneous points via an homography.
  25. std::vector<cv::Point2f> transform_via_homography(const std::vector<cv::Point2f>& points, const cv::Matx33f& homography)
  26. {
  27.     // Convert 2D points from Cartesian coordinate to homogeneous coordinate
  28.     std::vector<cv::Point3f> ph;
  29.     to_homogeneous(points, ph);
  30.  
  31.     // Applied homography
  32.     for (size_t i = 0; i < ph.size(); i++)
  33.     {
  34.         ph[i] = homography*ph[i];
  35.     }
  36.  
  37.     // Convert (Normalised) the points back to Cartesian coordinate system
  38.     std::vector<cv::Point2f> r;
  39.     from_homogeneous(ph, r);
  40.     return r;
  41. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement