From 7ed18e9fb7cf3cef6708763f8b88953c3e9686d3 Mon Sep 17 00:00:00 2001 From: Prasanna Krishnasamy Date: Sun, 21 May 2017 00:08:07 +0000 Subject: [PATCH] Adding 11-02 example --- example_11-02.cpp | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 example_11-02.cpp diff --git a/example_11-02.cpp b/example_11-02.cpp new file mode 100644 index 0000000..1f4f0b0 --- /dev/null +++ b/example_11-02.cpp @@ -0,0 +1,47 @@ +// Example 11-2. Code for perspective transformation +// Compute a perspective transformation between the 4 src control points +// in srcQuad to 4 dst control points in dstQuad and apply it the image. + +#include +#include + +using namespace std; + +int main(int argc, char** argv) { + + if(argc != 2) { + cout << "Perspective Warp\nUsage: " <\n" << endl; + return -1; + } + + cv::Mat src = cv::imread(argv[1],1); + if( src.empty() ) { cout << "Can not load " << argv[1] << endl; return -1; } + + cv::Point2f srcQuad[] = { + cv::Point2f(0, 0), // src Top left + cv::Point2f(src.cols-1, 0), // src Top right + cv::Point2f(src.cols-1, src.rows-1), // src Bottom right + cv::Point2f(0, src.rows-1) // src Bottom left + }; + + cv::Point2f dstQuad[] = { + cv::Point2f(src.cols*0.05f, src.rows*0.33f), + cv::Point2f(src.cols*0.9f, src.rows*0.25f), + cv::Point2f(src.cols*0.8f, src.rows*0.9f), + cv::Point2f(src.cols*0.2f, src.rows*0.7f) + }; + + // COMPUTE PERSPECTIVE MATRIX + // + cv::Mat warp_mat = cv::getPerspectiveTransform(srcQuad, dstQuad); + cv::Mat dst; + cv::warpPerspective(src, dst, warp_mat, src.size(), cv::INTER_LINEAR, + cv::BORDER_CONSTANT, cv::Scalar()); + + for( int i = 0; i < 4; i++ ) + cv::circle(dst, dstQuad[i], 5, cv::Scalar(255, 0, 255), -1, cv::LINE_AA); + + cv::imshow("Perspective Transform Test", dst); + cv::waitKey(); + return 0; +}