opencv 识别长方形_利用OpenCV检测图像中的长方形画布或纸张并提取图像内容

问题如下:

a4c26d1e5885305701be709a3d33442f.png

也就是在一张照片里,已知有个长方形的物体,但是经过了透视投影,已经不再是规则的长方形,那么如何提取这个图形里的内容呢?这是个很常见的场景,比如在博物馆里看到一幅很喜欢的画,用手机找了下来,可是回家一看歪歪斜斜,脑补原画内容又觉得不对,那么就需要算法辅助来从原图里提取原来的内容了。不妨把应用的场景分为以下:

纸张四角的坐标(图中红点)已知的情况

也就是上面的左图中4个红点是可以准确获取,比如手动标注,那么就简单了:用OpenCV的Perspective

Transform就可以。具体步骤如下:

1)

将标注好的四个点坐标存入一个叫corner的变量里,比如上面的例子中,原图的分辨率是300x400,定义x和y的方向如下:

a4c26d1e5885305701be709a3d33442f.png

那么纸张的四角对应的坐标分别是:

左上:157.6, 71.5

右上:295.6, 118.4

右下:172.4, 311.3

左下:2.4, 202.4

把这四个坐标按如上顺序放到一个叫corner的变量里。如果我们打算把这幅图案恢复到一个300x400的图像里,那么按照对应的顺序把下面四个坐标放到一个叫canvas的变量里:

左上:0, 0

右上:300, 0

右下:300, 400

左下:0, 400

假设原图已经用OpenCV读取到一个叫image的变量里,那么提取纸张图案的代码如下:

1 M =cv2.getPerspectiveTransform(corners, canvas)2 result = cv2.warpPerspective(image, M, (0, 0))

把左图剪裁出来,去掉红点后试了试,结果如下:

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值