我發現了一個程序,它改變的角度來看,像如何撤消cvWarpPerspective
我的問題是怎樣才能得到回源圖像,並獲得紅的座標指出第二張圖中的畫? 下面的代碼:
#include <opencv\cv.h>
#include <opencv\highgui.h>
int main(int argc, char** argv) {
CvPoint2D32f srcQuad[4], dstQuad[4];
CvMat* warp_matrix = cvCreateMat(3,3,CV_32FC1);
IplImage *src, *dst;
src=cvLoadImage("b.jpg",1) ;
dst = cvCloneImage(src);
dst->origin = src->origin;
cvZero(dst);
srcQuad[0].x = 0; //src Top left
srcQuad[0].y = 0;
srcQuad[1].x = src->width - 1; //src Top right
srcQuad[1].y = 0;
srcQuad[2].x = 0; //src Bottom left
srcQuad[2].y = src->height - 1;
srcQuad[3].x = src->width -1; //src Bot right
srcQuad[3].y = src->height - 1;
dstQuad[0].x = src->width*0.05; //dst Top left
dstQuad[0].y = src->height*0.33;
dstQuad[1].x = src->width*0.9; //dst Top right
dstQuad[1].y = src->height*0.25;
dstQuad[2].x = src->width*0.2; //dst Bottom left
dstQuad[2].y = src->height*0.7;
dstQuad[3].x = src->width*0.8; //dst Bot right
dstQuad[3].y = src->height*0.9;
cvGetPerspectiveTransform(
srcQuad,
dstQuad,
warp_matrix
);
cvWarpPerspective(src, dst, warp_matrix);
cvNamedWindow("Perspective_Warp", 1);
cvShowImage("Perspective_Warp", dst);
cvSaveImage("bbb.jpg",dst);
cvWaitKey();
cvReleaseImage(&dst);
cvReleaseMat(&warp_matrix);
return 0;
}
UPDATE
@mrgloom的建議後,我可以回到第一個觀點。
cvInvert(warp_matrix,inversematrix);
cvWarpPerspective(dst, src2, inversematrix);
cvNamedWindow("2", 2);
cvShowImage("2", src2);
感謝您的幫助!
你甚至不需要顯式的逆。您可以將'CV_WARP_INVERSE_MAP'標誌傳遞給'cvWarpPerspective()' –