利用OpenCV检测图像中的长方形画布或纸张并提取图像内容..pdf

利用OpenCV检测图像中的长方形画布或纸张并提取图像内容..pdf

  1. 1、本文档共15页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
问题如下: 也就是在一张照片里, 已知有个长方形的物体, 但是经过了透视投影, 已经不再是规则的长 方形,那么如何提取这个图形里的内容呢?这是个很常见的场景, 比如在博物馆里看到一幅 很喜欢的画,用手机找了下来, 可是回家一看歪歪斜斜, 脑补原画内容又觉得不对,那么就 需要算法辅助来从原图里提取原来的内容了。不妨把应用的场景分为以下: 纸张四角的坐标 ( 图中红点 ) 已知的情况 也就是上面的左图中 4 个红点是可以准确获取,比如手动标注,那么就简单了:用 OpenCV 的 Perspective Transform 就可以。具体步骤如下: 1) 将标注好的四个点坐标存入一个叫 corner 的变量里,比如上面的例子中,原图的分辨率 是 300x400 ,定义 x 和 y 的方向如下: 那么纸张的四角对应的坐标分别是: 左上: 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)) 把左图剪裁出来,去掉红点后试了试,结果如下: 当然,其实这一步用 Photoshop 就可以了。。 纸张四角的坐标未知或难以准确标注的情况 这种场景可能是小屏幕应用,或是原始图像就很小,比如我这里用的这个 300x400 例子, 点坐标很难精确标注。 这种情况下一个思路是, 用边缘检测提取纸张四边, 然后求出四角坐 标,再做 Perspective Transform 。 1) 图像预处理 一般而言即使做普通的边缘检测也需要提前对图像进行降噪避免误测, 比如最常见的办法是 先对图像进行高斯滤波, 然而这样也会导致图像变得模糊, 当待检测图形边缘不明显, 或是 图像本身分辨率不高的情况下 ( 比如本文用的例子 ) ,会在降噪的同时把待检测的边缘强度也 给牺牲了。 具体到本文的例子, 纸张是白色, 背景是浅黄带纹路, 如果进行高斯滤波是显然 不行的,这时候一个替代方案是可以考虑使用 Mean Shift ,Mean Shift 的优点就在于如果是 像背景桌面的浅色纹理, 图像分割的过程中相当于将这些小的浮动过滤掉, 并且保留相对明 显的纸张边缘,结果如下: 原图 处理后 Meanshift 的代码: 1 image = cv2.pyrMeanShiftFiltering(image, 25, 10) 因为主要目的是预处理降噪, windows size 和 color distance 都不用太大,避免浪费计算时 间还有过度降噪。 降噪后可以看到桌面上的纹理都被抹去了, 纸张边缘附近干净了很多。 然 而这还远远不够, 图案本身,和图像里的其他物体都有很多明显的边缘, 而且都是直线边缘。 2) 纸张边缘检测 虽然降噪了, 可是图像里还是有很多边缘明显的元素。

文档评论(0)

ey8703 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档