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

前言

前面一章《【干货】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-

长按下方二维码关注微卡智享

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Vaccae

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值