前言
前面一章《【干货】C++ OpenCV案例实战---卡片截取(附代码)》我们通过实战练习了怎么截取卡片信息,但是如果遇到了图片中卡片不是正方向的话我们就截取不了,这一篇我们在上面的基础上研究一下卡片的旋转截取。
演示效果
可以看到右边我们最终获取的卡片也是经过旋转过来后的,不过感觉还是有点歪,没有达到最好的效果,后续也会在不断的尝试,总结一下就是取边缘时的阈值很重要,现在还是不太熟练,需要多做练习。
代码演示
我们再新建一个项目名为opencv--qiebian2,按照配置属性(VS2017配置OpenCV通用属性),然后在源文件写入#include和main方法.
我们先把上一节课的代码拷贝过来,因为也用到了
先是闭操作,寻找轮廓等,下面就是我们的重点
获取最大矩形
首先要查找轮廓内最大的长度和高度的矩形,用于判断是不是我们要找的卡片,把最大的宽度和高度记录在了maxw和maxh两个变量里面
定位最大矩形进行旋转
我们这里需要重新再遍历一次,找到我们刚才获取到的最大矩形进行旋转处理
上面标红框的是因为我原来的图片是手机拍后横向旋转过的,需要再增加90度进行处理。
旋转后的图片进行截取
在新的图片中重新走一遍寻找图片的流程
上面我加上了try catch,因为在测试过程中也遇到过问题,后来通过输出来跟踪,所以加上了try catch,这里可以看一下,标准的C++的捕获异常的写法。
最后我们运行起来这个程序效果
-END-