OpenCV-Python教程!Open-CV可是神器呢,肯定要学的!

  • A+
所属分类:python数据分析

OpenCV-Python教程!Open-CV可是神器呢,肯定要学的!

实现

使用方式如下:

OpenCV-Python教程!Open-CV可是神器呢,肯定要学的!

需要注意的是cv2.findContours()函数接受的参数为二值图,即黑白的(不是灰度图),所以读取的图像要先转成灰度的,再转成二值图,参见4、5两行。第六行是检测轮廓,第七行是绘制轮廓。

结果

原图如下:

OpenCV-Python教程!Open-CV可是神器呢,肯定要学的!

检测结果如下:

OpenCV-Python教程!Open-CV可是神器呢,肯定要学的!

注意,findcontours函数会“原地”修改输入的图像。这一点可通过下面的语句验证:

OpenCV-Python教程!Open-CV可是神器呢,肯定要学的!

执行这些语句后会发现原图被修改了。

cv2.findContours()函数

函数的原型为

OpenCV-Python教程!Open-CV可是神器呢,肯定要学的!

OpenCV-Python教程!Open-CV可是神器呢,肯定要学的!

OpenCV-Python教程!Open-CV可是神器呢,肯定要学的!

返回值

cv2.findContours()函数返回两个值,一个是轮廓本身,还有一个是每条轮廓对应的属性。

contour返回值

cv2.findContours()函数首先返回一个list,list中每个元素都是图像中的一个轮廓,用numpy中的ndarray表示。这个概念非常重要。在下面drawContours中会看见。通过

OpenCV-Python教程!Open-CV可是神器呢,肯定要学的!

hierarchy返回值

此外,该函数还可返回一个可选的hiararchy结果,这是一个ndarray,其中的元素个数和轮廓个数相同,每个轮廓contours[i]对应4个hierarchy元素hierarchy[i][0] ~hierarchy[i][3],分别表示后一个轮廓、前一个轮廓、父轮廓、内嵌轮廓的索引编号,如果没有对应项,则该值为负数。

通过

OpenCV-Python教程!Open-CV可是神器呢,肯定要学的!

cv2.drawContours()函数

[python] view plain copy

  1. cv2.drawContours(image, contours, contourIdx, color[, thickness[, lineType[, hierarchy[, maxLevel[, offset ]]]]])

  • 第一个参数是指明在哪幅图像上绘制轮廓;

  • 第二个参数是轮廓本身,在Python中是一个list。

  • 第三个参数指定绘制轮廓list中的哪条轮廓,如果是-1,则绘制其中的所有轮廓。后面的参数很简单。其中thickness表明轮廓线的宽度,如果是-1(cv2.FILLED),则为填充模式。绘制参数将在以后独立详细介

OpenCV-Python教程!Open-CV可是神器呢,肯定要学的!

OpenCV-Python教程!Open-CV可是神器呢,肯定要学的!

这里a[:,0]的意思就是a[0:5,0],也就是a[0:5,0:0:2],这三者是等价的。

回头看一下,a的shape是(5,1,2),表明是三个轴的。在numpy的数组中,轴的索引是通过逗号分隔的。同时冒号索引“:”表示的是该轴的所有元素。因此a[:, 0]表示的是第一个轴的所有元素和第二个轴的第一个元素。在这里既等价于a[0:5, 0]。

再者,若给出的索引数少于数组中总索引数,则将已给出的索引树默认按顺序指派到轴上。比如a[0:5,0]只给出了两个轴的索引,则第一个索引就是第一个轴的,第二个索引是第二个轴的,而第三个索引没有,则默认为[:],即该轴的所有内容。因此a[0:5,0]也等价于a[0:5,0:0:2]。

OpenCV-Python教程!Open-CV可是神器呢,肯定要学的!

OpenCV-Python教程!Open-CV可是神器呢,肯定要学的!

OpenCV-Python教程!Open-CV可是神器呢,肯定要学的!

weinxin
我的微信公众号
爱真理,得永生!          爱在灵灵久博客,网罗天下,福利大家!

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: