OpenCV练习第二弹

专注于计算机视觉,用心灵的窗口照亮世界。

本次练习的目的是做出类似扫描全能王软件的部分功能。涉及到以下四个知识点:

1.opencv寻找轮廓

2.opencv仿射变换

3.C++ sort


OpenCV练习第二弹


一、opencv寻找轮廓

opencv中提供findContours函数来寻找图像中物体的轮廓,并结合drawContours函数将找到的轮廓绘制出,opencv中findContours有两种形式:

轮廓的排序是由外侧开始查找(图像的边界为第0号轮廓),当一个轮廓既有内嵌轮廓,又有同级轮廓时,内嵌轮廓的优先级更高(即内嵌轮廓的contours序号更小)。


OpenCV练习第二弹

hierarchy[i]对应于contours[i],hierarchy[i][0]~hierarchy[i][3] 中,0代表平级轮廓的后一个,1代表平级的前一个,2代表子级,3代表父级,没有的话则值为-1。


OpenCV练习第二弹

二、opencv仿射变换

先聊聊图像的几何操作,这些操作包括各种方式的拉伸,包括一致性缩放和非一致性缩放。对于平面区域,有两种方式的几何转换:一种是基于2*3矩阵进行的变换,叫做仿射变换;另一种是基于3*3矩阵进行的变换,叫做透视变换或单应性映射

仿射变换可以形象的表示成以下形式。一个平面内的任意平行四边形ABCD可以被仿射变换映射为另一个平行四边形A’B’C’D’。通俗的解释就是,可以将仿射变换想象成一幅图像画到一个胶版上,在胶版的角上推或拉,使其变形而得到不同类型的平行四边形。相比较仿射变换,透射变换更具有灵活性,一个透射变换可以将矩形转变成梯形。如下图:


OpenCV练习第二弹

三、C++ sort

STL几乎封装了所有的数据结构中的算法,从链表到队列,从向量到堆栈,对hash到二叉树,从搜索到排序,从增加到删除……可以说,如果你理解了STL,你会发现你已不用拘泥于算法本身,从而站在巨人的肩膀上去考虑更高级的应用。

所有的sort算法的参数都需要输入一个范围,[begin,end)。另外,如果需要按照某种特定方式进行排序,需要给sort指定比较函数,否则程序会自动提供一个比较函数。


参考文献:

1.【OpenCV:OpenCV modules

2.【opencv学习(四十)之寻找图像轮廓findContours()

3.【【OpenCV】图像变换(五)-仿射变换和透视变换

4.【详细解说 STL 排序(Sort)


9/12/2017 5:39:44 PM

作者:大表哥

版权归作者所有,转载请注明出处

源码请访问:https://github.com/joeaaron/LearningOpenCV/tree/PT-DEV