先放效果图:

一个歪的数独棋盘

接下来,就是见证奇迹的时刻:

矫正之后的棋盘(只保留棋盘部分)

在没有看到opencv里面的几何变换之前,我一直都疑惑着说一些软件上面的自动矫正是什么原理,现在opencv里面的cv2.getPerspectiveTransform() 和cv2.warpPerspective()解决了我都疑惑。

在opencv中图像的几何变换主要缩放(scaling)、 旋转(rotation)(带缩放功能)、映射变换(affine/perspective transform)等。这里主要讲映射变换【affine/perspective transform】

affine transform 和 perspective transform的共同点都是通过输入点和输出点来计算映射矩阵。不同的是,affine transform需要的是输入三个点坐标,以及这三个点对应的输出坐标。perspective tranform需要的是输入四个点坐标,以及这四个点对应的输出坐标。这是他们的最大最大的不同。上面的图片矫正使用的是perspective tranform方法。

所以要得到将一个图片矫正,只需直到原图像上面的四个点和目标图像上与原图像对应的四个点即可(NOTE:任意三点不能共线),下面是直接的代码,很简短。cv大法好!!!

# load a image

img = cv2.imread('shudu.jpg')

rows, cols = img.shape[:2]

# original pts

pts_o = np.float32([[91, 271], [677, 192], [211, 760], [899, 628]]) # 这四个点为原始图片上数独的位置

pts_d = np.float32([[0, 0], [600, 0], [0, 600], [600, 600]]) # 这是变换之后的图上四个点的位置

# get transform matrix

M = cv2.getPerspectiveTransform(pts_o, pts_d)

# apply transformation

dst = cv2.warpPerspective(img, M, (600, 600)) # 最后一参数是输出dst的尺寸。可以和原来图片尺寸不一致。按需求来确定

cv2.imshow('img', img)

cv2.imshow('dst', dst)

cv2.waitKey(0)

cv2.destroyAllWindows()原图是四个标记点矫正后图片的四个对应的点

附录:

我还试了一下用affine的方法。显然affine transform的方法不是很好

从图中可以看到,affine transform的效果没有perspective的方法好。原因是affine只使用了三个点,显然三个点并不能唯一确定一个矩形,所以总会有一个角落的部分是未矫正的。而perspective transform是四个点,则可以确定一个唯一的矩形了。

欢迎大家批评指正,共同进步^_^

############################# END #############################

python快速实现图像矫正_OpenCV-python 实现图片矫正相关推荐

  1. python快速编程入门例题-Python快速编程入门,打牢基础必须知道的11个知识点 !...

    Python被誉为全世界高效的编程语言,同时也被称作是"胶水语言",那它为何能如此受欢迎,下面我们就来说说Python入门学习的必备11个知识点,也就是它为何能够如此受欢迎的原因. ...

  2. python快速编程入门教程-python从入门到精通之30天快速学python视频教程

    python从入门到精通之30天快速学python视频教程 课程目录: python入门教程-1-Python编程语言历史及特性.mkv python入门教程-2-Python编程语言初接触.mkv ...

  3. python制作七夕礼物_OpenCV+Python制作程序七夕(情人节)礼物

    1. 按 不知不觉七夕就过去了! 如果有对象,祝早生贵子!没有对象,祝早结连理! (搞笑一下,祝大家幸福美满吧,嘿嘿嘿) 给大家准备了一份已经写好的代码,利用Python+OpenCV+OpenPyX ...

  4. 利用python识别图片中的条码及条码图片矫正和增强!

    前言 这周和大家分享如何用python识别图像里的条码.用到的库可以是zbar.希望西瓜6辛苦码的代码不要被盗了.(zxing的话,我一直没有装好,等装好之后再写一篇) 具体步骤 前期准备 用open ...

  5. python快速爬虫视频_“python怎么快速爬虫视频“python 爬网页视频教程

    用python怎样爬网页 # coding:utf8 import cookielib import urllib2 url = "http://blog.uouo123.com" ...

  6. python制作七夕礼物_opencv+python制作硬核七夕礼物

    点击上方"蓝色小字"关注我呀 明天就是七夕了! 如果有对象,祝早生贵子!没有对象,祝早结连理! (搞笑一下,祝大家幸福美满吧,嘿嘿嘿) 给大家准备了一份已经写好的代码,利用pyth ...

  7. python快速实现图像矫正_图像矫正OpenCV Python

    我正在尝试纠正RGB-D Dataset 7-Scenes中的成对图像.由于数据集提供了地面真实姿态数据,所以我没有试图提取匹配点和计算F,而是使用看起来正确的https://math.stackex ...

  8. python快速注释html5_P29-30《Python爬虫技术5天速成…》学习过程笔记16(超详细记录)...

    对应原视频 第29集  补充flask(上) & 第30集  补充flask(下): 本篇概要: P29 --flask框架的样子 --创建flask框架后直接运行就报错.测试.解决 --通过 ...

  9. python opencv 录制视频_OpenCV Python 录制视频

    学到实用OpenCV调用笔记本电脑的摄像头,并录制视频保存到本地硬盘的时候,出现了一点故障,那就是获取到的文件总是为0KB.经过一番查找,终于找到了解决办法. 调用摄像头 调用摄像头作为本实验的基础是 ...

最新文章

  1. “六神”——技术提高开发效率的一个方案
  2. 流量低峰也烦人-lighttpd耗时长问题追查
  3. Redis持久化机制 -全量同步与增量同步的区别
  4. Python 自定义函数和参数类型
  5. UE4材质:只在石头缝中刷草
  6. WinForm学习笔记(2)
  7. 【Python基础】GitHub 星标 8.8w+,Python 小白 100 天学习计划,从新手到大师!
  8. 580分左右的计算机院校,2021年高考580分可以上什么大学 580分左右的院校
  9. Java 线程实例一(查看线程是否存活、获取当前线程名称、状态监测、线程优先级设置、死锁及解决方法、获取线程id、线程挂起)
  10. linux openssl 证书,Linux上的openSSL证书验证
  11. 深入分析Nginx 502 Bad Gateway和Nginx 504 Gateway Time-out
  12. Java foreach remove问题分析
  13. Javaweb项目各个模块的用途
  14. Word文档中快速插入分隔线的技巧_C#教程
  15. mysql中两位小数点_mysql 保留两位小数函数
  16. 易维联温湿度记录仪的使用
  17. 论文《DeepHawkes: Bridging the Gap between Prediction and Understanding of Information Cascades》阅读
  18. imx6ul uart8路串口调试(代码)
  19. android usb通讯波特率,USB串口的特殊波特率通信
  20. 实用的vue插件大汇总

热门文章

  1. Ubuntu系统安装教程UEFI引导
  2. 沙盒化容器:是容器还是虚拟机?
  3. Android APP 默认赋予权限
  4. CSS中怎么做人头像,用CSS让头像动起来
  5. Devops 03 Github
  6. Linux系统漏洞扫描及中高危漏洞解决
  7. opencv-python读取透明图片(既带alpha通道)
  8. PointCut切点表达式
  9. 蜘蛛牌窗口-游戏规则和说明
  10. [附源码]java毕业设计高校创新创业项目管理系统