简体   繁体   中英

Getting back to the original coordinates from a warped Image

I have four corners extracted from a image,

std::vector<cv::Point2f> ecken;
ecken.push_back(corners[0]);
ecken.push_back(corners[size.height-1]);
ecken.push_back(corners[size.area()-size.height-1]);
ecken.push_back(corners[size.area()-1]);

they are warped in to a second image:

quad_pts.push_back(cv::Point2f(0, 0));
            quad_pts.push_back(cv::Point2f(quad.cols, 0));
            quad_pts.push_back(cv::Point2f(quad.cols, quad.rows));
            quad_pts.push_back(cv::Point2f(0, quad.rows));

        // Get transformation matrix
            cv::Mat transmtx = cv::getPerspectiveTransform(ecken, quad_pts);
cv::warpPerspective(src, quad, transmtx, quad.size(),1);

I want to go back to the original image from the result that I get in quad, these what I've tried:

cv::Mat trans  = cv::getPerspectiveTransform(quad_pts,ecken );
        cv::perspectiveTransform(quad,test,trans); /// I'm not sure that this correct and the program crashes here

and here the error message in the console:

OpenCV Error: Assertion failed (scn + 1 == m.cols && (depth == CV_32F || depth =
= CV_64F)) in unknown function, file ..\..\..\opencv\modules\core\src\matmul.cpp
, line 1926

and it didn't work !! any idea ??

Your two Mat objects are of different depth. Check by printing Mat.depth() that both have the same image type. It could be that one of them is grayscale and the other colour.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM