用OpenCV检测图像中的长方形画布或纸张并提取图像内容
来源:互联网 发布:打怪升级的网络手游 编辑:程序博客网 时间:2024/05/20 03:07
纸张四角的坐标(图中红点)已知的情况
右上:295.6, 118.4
右下:172.4, 311.3
左下:2.4, 202.4
右上:300, 0
右下:300, 400
左下:0, 400
1 M = cv2.getPerspectiveTransform(corners, canvas)2 result = cv2.warpPerspective(image, M, (0, 0))
纸张四角的坐标未知或难以准确标注的情况
1 image = cv2.pyrMeanShiftFiltering(image, 25, 10)
因为主要目的是预处理降噪,windows size和color distance都不用太大,避免浪费计算时间还有过度降噪。降噪后可以看到桌面上的纹理都被抹去了,纸张边缘附近干净了很多。然而这还远远不够,图案本身,和图像里的其他物体都有很多明显的边缘,而且都是直线边缘。
2) 纸张边缘检测
3) 直线检测
4) 判断纸张边缘
正是要的结果。
5) 计算四角的坐标
接下来计算四条线的交点,方法点这里。因为有4条线,会得到6个结果,因为在这种应用场景中,方形的物体在透视变换下不会出现凹角,所以直接舍弃离纸张中心最远的两个交点就得到了四个角的坐标,结果如下:
这样就回到了一开始四角坐标已经得到的情况,直接进行透视变换就行了。
Camera Calibration?
写了这么多,其实有一条至关重要的假设,甚至可以说是最关键的步骤之一我一直没提,那就是Camera Calibration,如果有相机的情况下,meta data都知道,那么需要先坐Camera Calibration才能知道纸张或者画布的原始尺寸。我这里试的例子当然是没有的,也可以有,相应的算法OpenCV里也有现成的,但准确度未必够,而且还是非常麻烦,所以我的所有流程都是默认原始尺寸已经获得了。再说了,就算没有,变换回方形之后使用者凭感觉进行简单轴缩放都比Camera Calibration方便得多。。
印象派
我用的例子算是略微有些极端的,因为背景和图案非常接近,另一方面分辨率还巨低。在网上搜搜,我找了幅少年画家的印象派作品来试试:
原图
手动标注
GrabCut
检测到的边缘
结果
看上去还不错~
- 用OpenCV检测图像中的长方形画布或纸张并提取图像内容
- 利用OpenCV检测图像中的长方形画布或纸张并提取图像内容
- 利用OpenCV检测图像中的长方形画布或纸张并提取图像内容
- 将图像扭正确。利用OpenCV检测图像中的长方形画布或纸张并提取图像内容
- OpenCV—RGB图像灰度化,并提取轮廓
- OpenCV-检测并提取表格
- opencv-图像轮廓用长方形和圆圈显示
- opencv 图像阴影检测
- opencv 图像阴影检测
- OpenCV检测图像轮廓
- 【OpenCV】图像模糊检测
- opencv图像边缘检测
- opencv 图像阴影检测
- OpenCV—反向投影直方图检测特定图像内容
- html5 canvas 绘制图像、画布或视频
- QT+opencv实现人脸检测并提取裁剪
- Opencv 图像增强算法 图像检测结果
- Opencv 图像增强算法 图像检测结果
- vue小结笔记(4)之v-resource应用
- imageview+handler+gridview+上拉下拉
- 电商购物
- 线段树乘法取%版
- Android popwindow简单实现弹框
- 用OpenCV检测图像中的长方形画布或纸张并提取图像内容
- android杂项笔记,关于横屏纵屏问题,混淆问题备份
- JavaScript实时反馈系统时间
- Codeforces-877E:Danil and a Part-time Job(DFS序列+线段树)
- 全局捕获异常类
- 各大公司Java后端开发面试题总结
- 素数
- 简单实现购物车和本地购物车
- Shadowsocks 一键安装脚本