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

  1. #include<iostream>
  2. #include<opencv2/highgui/highgui.hpp>
  3. #include<opencv2/imgproc/imgproc.hpp>
  4. using namespace cv;
  5. using namespace std;
  6. int main( )
  7. {
  8. Mat img=imread("1.jpg");
  9. int img_height = img.rows;
  10. int img_width = img.cols;
  11. vector<Point2f> corners(4);
  12. corners[0] = Point2f(0,0);
  13. corners[1] = Point2f(img_width-1,0);
  14. corners[2] = Point2f(0,img_height-1);
  15. corners[3] = Point2f(img_width-1,img_height-1);
  16. vector<Point2f> corners_trans(4);
  17. corners_trans[0] = Point2f(150,250);
  18. corners_trans[1] = Point2f(771,0);
  19. corners_trans[2] = Point2f(0,img_height-1);
  20. corners_trans[3] = Point2f(650,img_height-1);
  21. Mat transform = getPerspectiveTransform(corners,corners_trans);
  22. cout<<transform<<endl;
  23. vector<Point2f> ponits, points_trans;
  24. for(int i=0;i<img_height;i++){
  25. for(int j=0;j<img_width;j++){
  26. ponits.push_back(Point2f(j,i));
  27. }
  28. }
  29. perspectiveTransform( ponits, points_trans, transform);
  30. Mat img_trans = Mat::zeros(img_height,img_width,CV_8UC3);
  31. int count = 0;
  32. for(int i=0;i<img_height;i++){
  33. uchar* p = img.ptr<uchar>(i);
  34. for(int j=0;j<img_width;j++){
  35. int y = points_trans[count].y;
  36. int x = points_trans[count].x;
  37. uchar* t = img_trans.ptr<uchar>(y);
  38. t[x*3] = p[j*3];
  39. t[x*3+1] = p[j*3+1];
  40. t[x*3+2] = p[j*3+2];
  41. count++;
  42. }
  43. }
  44. imwrite("1_trans.jpg",img_trans);
  45. namedWindow("原图");
  46. imshow("原图", img);
  47. namedWindow("透视变换图");
  48. imshow("透视变换图", img_trans);
  49. waitKey(0);
  50. return 0;
  51. }

原图:


透视变换之后的效果图:

转载自:https://blog.csdn.net/llx1026/article/details/78289247

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

  1. opencv透视变换:GetPerspectiveTransform、warpPerspective函数的使用

    透视变换在图像还原的上的应用很广泛,他是将成像投影到一个新的视平面.比如两个摄像头在不同的角度对统一物体进行拍照,物体上的同一个点在两张照片上的坐标是不一样的,为了实现两张图片同一个点的对应关系映射, ...

  2. HALCON示例程序check_fish_stick_dimension.hdev生鱼棒尺寸测量;基于形态学的像素级精度尺寸测量

    HALCON示例程序check_fish_stick_dimension.hdev基于形态学的像素级精度尺寸测量 示例程序源码(加注释) 关闭实时显示更新 dev_update_off () 关闭窗口 ...

  3. 基于 FFMPEG 的像素格式变换(swscale,致敬雷霄骅)

    基于 FFMPEG 的像素格式变换(swscale,致敬雷霄骅) 前几天写了几篇关于ffmpeg 编程转封装的入门文章,下一步本来是要写转码或者编码的.但是发现无论是转码还是编码,都会遇到图像像素格式 ...

  4. python 赋值方法_基于Python List的赋值方法

    Python中关于对象复制有三种类型的使用方式,赋值.浅拷贝与深拷贝.他们既有区别又有联系,刚好最近碰到这一类的问题,研究下. 一.赋值 在python中,对象的赋值就是简单的对象引用,这点和C++不 ...

  5. R语言使用dplyr包的group_by函数和summarise函数基于分组变量计算分析中涉及的所有协变量的均值(Difference in means of covariates)

    R语言使用dplyr包的group_by函数和summarise函数基于分组变量计算分析中涉及的所有协变量的均值(Difference in means of covariates) 目录

  6. 转载 基于bayer型阵列的空间域插值

    基于bayer型阵列的空间域插值算法分 蒲杰 女,重庆邮电大学,在读硕士,研究方向为移动通信. 李振中 重庆邮电大学通信与信息工程学院. 屈刚 江苏省邮电规划设计院有限责任公司. 1 引言 在数码照相 ...

  7. 基于主动学习和克里金插值的空气质量推测

    基于主动学习和克里金插值的空气质量推测 常慧娟, 於志文, 於志勇, 安琦, 郭斌 西北工业大学计算机学院,陕西 西安 710072 福州大学数学与计算机科学学院,福建 福州 350108    摘要 ...

  8. 基于 Python 的自然邻域法空间插值的实现与优化

      接上期基于 Python 的自然邻域法空间插值的实现与思考.   上期说到,我们仅仅利用自然邻域法基础原理进行插值,会出现许多空值.异常值,且与ArcGIS相同分辨率.范围下的插值结果对比(对比图 ...

  9. 基于ArcGis栅格数据的腌膜、插值、分类色带等图像处理

    基于ArcGis栅格数据的腌膜.插值.分类色带等图像处理 问题 因源数据缺失以及色带问题,导致图像很难看. 腌膜处理 ArcToolbox>Spatial Analyst工具>提取分析&g ...

最新文章

  1. 将数据库的0和1显示为jsp页面的是和否
  2. Ordering Tasks
  3. 我的世界连锁挖矿下载JAVA_我的世界1.7.10连锁挖矿整合包
  4. 实体类的动态生成(三)
  5. 操作系统【六】虚拟内存
  6. tcp协议seq和ack
  7. 微软原生 Notepad 融入 VS Code 才是出路?
  8. python3.4连接mysql5.7数据库增删改查
  9. ubuntu-12.04.4-server安装
  10. mockito简单教程
  11. Jensen不等式及其扩展
  12. PHP-利用阿里云邮件推送免费发邮件详细步骤
  13. excel自动调整列宽_Java 设置Excel自适应行高、列宽
  14. 波束成形技术原理解析
  15. bzoj5442: [Ceoi2018]Global warming
  16. python开发工程师招聘要求
  17. div html 下边加横线_css字体下边横线 html超链接更改颜色和去掉下划线
  18. 成都艾司博讯:什么是拼多多网店的品质退款率?
  19. Rancher简介和部署
  20. 货车驱动桥设计英文资料翻译

热门文章

  1. 23.网市场云建站系统部署
  2. 【Day04】介绍防抖节流原理、区别以及应用,并用 JavaScript 进行实现
  3. 【C语言】利用二维数组输出成绩
  4. C#LeetCode刷题之#824-山羊拉丁文​​​​​​​(Goat Latin)
  5. 通用职责分配软件原则之3-低耦合原则
  6. 关于黑名单和白名单的一些思考
  7. javascript教程_JavaScript教程
  8. 如何在Windows上安装Angular:Angular CLI,Node.js和构建工具指南
  9. u8薪资管理_用友U8习题集
  10. dma和通道的区别_STM32 定时器触发 ADC 多通道采集,DMA搬运至内存