1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 透视变换--基于getPerspectiveTransform()及像素赋值(未涉及插值)

透视变换--基于getPerspectiveTransform()及像素赋值(未涉及插值)

时间:2018-08-20 03:58:58

相关推荐

透视变换--基于getPerspectiveTransform()及像素赋值(未涉及插值)

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

#include<iostream>#include<opencv2/highgui/highgui.hpp>#include<opencv2/imgproc/imgproc.hpp>using namespace cv;using namespace std; int main( ) { Mat img=imread("1.jpg");int img_height = img.rows;int img_width = img.cols;vector<Point2f> 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<Point2f> 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<<transform<<endl;vector<Point2f> ponits, points_trans;for(int i=0;i<img_height;i++){for(int j=0;j<img_width;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<img_height;i++){ uchar* p = img.ptr<uchar>(i);for(int j=0;j<img_width;j++){ int y = points_trans[count].y; int x = points_trans[count].x; uchar* t = img_trans.ptr<uchar>(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; }

原图:

透视变换之后的效果图:

转载自:/llx1026/article/details/78289247

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。