I'm not sure if you have already tried the Opencv library, but it has a very good way to place an image. I have a small fragment that takes a series of corners, for example, your four corners and the final size to display it.
You can read the warpPerspective man page on the OpenCV site .
cv::Mat deskew(cv::Mat& capturedFrame, cv::Point2f source_points[], cv::Size finalSize) { cv::Point2f dest_points[4]; // Output of deskew operation has same color space as source frame, but // is proportional to the area the document occupied; this is to reduce // blur effects from a scaling component. cv::Mat deskewedMat = cv::Mat(finalSize, capturedFrame.type()); cv::Size s = capturedFrame.size(); // Deskew to full output image corners dest_points[0] = cv::Point2f(0,s.height); // lower left dest_points[1] = cv::Point2f(0,0); // upper left dest_points[2] = cv::Point2f(s.width,0); // upper right dest_points[3] = cv::Point2f(s.width,s.height); // lower right // Build quandrangle "de-skew" transform matrix values cv::Mat transform = cv::getPerspectiveTransform( source_points, dest_points ); // Apply the deskew transform cv::warpPerspective( capturedFrame, deskewedMat, transform, s, cv::INTER_CUBIC ); return deskewedMat; }
source share