前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【干货】C++ OpenCV案例实战---卡片截取(旋转取卡)

【干货】C++ OpenCV案例实战---卡片截取(旋转取卡)

作者头像
Vaccae
发布2019-07-24 13:16:25
9850
发布2019-07-24 13:16:25
举报
文章被收录于专栏:微卡智享

前言

前面一章《【干货】C++ OpenCV案例实战---卡片截取(附代码)》我们通过实战练习了怎么截取卡片信息,但是如果遇到了图片中卡片不是正方向的话我们就截取不了,这一篇我们在上面的基础上研究一下卡片的旋转截取。

演示效果

可以看到右边我们最终获取的卡片也是经过旋转过来后的,不过感觉还是有点歪,没有达到最好的效果,后续也会在不断的尝试,总结一下就是取边缘时的阈值很重要,现在还是不太熟练,需要多做练习。

代码演示

我们再新建一个项目名为opencv--qiebian2,按照配置属性(VS2017配置OpenCV通用属性),然后在源文件写入#include和main方法.

我们先把上一节课的代码拷贝过来,因为也用到了

先是闭操作,寻找轮廓等,下面就是我们的重点


获取最大矩形

首先要查找轮廓内最大的长度和高度的矩形,用于判断是不是我们要找的卡片,把最大的宽度和高度记录在了maxw和maxh两个变量里面


定位最大矩形进行旋转

我们这里需要重新再遍历一次,找到我们刚才获取到的最大矩形进行旋转处理

上面标红框的是因为我原来的图片是手机拍后横向旋转过的,需要再增加90度进行处理。


旋转后的图片进行截取


在新的图片中重新走一遍寻找图片的流程

  1. 加载图片
  2. 转为灰度图
  3. 图像高斯模糊
  4. 进行闭操作(先膨胀后腐蚀)
  5. Canny边缘提取
  6. 寻找轮廓
  7. 轮廓中查找符合要求的项
  8. 获取上一步中对应项的最小矩形
  9. 从源图像中截取最小矩形生成新图片

上面我加上了try catch,因为在测试过程中也遇到过问题,后来通过输出来跟踪,所以加上了try catch,这里可以看一下,标准的C++的捕获异常的写法。


最后我们运行起来这个程序效果


-END-

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-09-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 微卡智享 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档