您现在的位置:首页 > >

透视变换实现代码(全)

发布时间:

好久没写博客了,因为白天要去实*,晚上看论文实在抽不出时间,由于项目需要,研究了透视变换,在网上找了一圈不是缺腿就是少胳膊的,后来对缺省的代码进行补充使其可以调通,现贴出来供大家学*使用,代码如下:



#include
#include
#include
using namespace cv;
using namespace std;

int main( )
{
Mat img=imread("1.jpg");
int img_height = img.rows;
int img_width = img.cols;
vector corners(4);
corners[0] = Point2f(0,0);
corners[1] = Point2f(img_width-1,0);
corners[2] = Point2f(0,img_height-1);
corners[3] = Point2f(img_width-1,img_height-1);
vector corners_trans(4);
corners_trans[0] = Point2f(150,250);
corners_trans[1] = Point2f(771,0);
corners_trans[2] = Point2f(0,img_height-1);
corners_trans[3] = Point2f(650,img_height-1);

Mat transform = getPerspectiveTransform(corners,corners_trans);
cout< vector ponits, points_trans;
for(int i=0;i for(int j=0;j ponits.push_back(Point2f(j,i));
}
}

perspectiveTransform( ponits, points_trans, transform);
Mat img_trans = Mat::zeros(img_height,img_width,CV_8UC3);
int count = 0;
for(int i=0;i uchar* p = img.ptr(i);
for(int j=0;j int y = points_trans[count].y;
int x = points_trans[count].x;
uchar* t = img_trans.ptr(y);
t[x*3] = p[j*3];
t[x*3+1] = p[j*3+1];
t[x*3+2] = p[j*3+2];
count++;
}
}
imwrite("1_trans.jpg",img_trans);
namedWindow("原图");
imshow("原图", img);
namedWindow("透视变换图");
imshow("透视变换图", img_trans);
waitKey(0);
return 0;
}
原图:



透视变换之后的效果图:




热文推荐
猜你喜欢
友情链接: 团党工作范文 工作范文 表格模版 社科文档网 营销文档资料 工程文档大全