图像轮廓

边缘检测虽然能检测出边缘,但边缘是不连续的,并不是一个整体。图像轮廓是将边缘连接起来形成的一个整体,用于后续的计算。图像轮廓是图像中非常重要的一个特征信息,通过图像轮廓的操作,可以获取目标图像的大小、位置、方向等信息。

cv2.findContours()函数可以查找图像内的轮廓信息,而cv2.drawContours()能够将轮廓绘制出来。

1.查找并绘制图像轮廓

image, contours, hierarchy=cv2.findContours(img,mode,method)

返回值image: 与函数参数中的图像image一致。在OpenCV 4.X中,该返回值已经被取消;

返回值contours: 返回的轮廓。是list类型,每个元素都是一个轮廓的信息,由此可以知道每个轮廓点的个数和位置。list的长度反映了轮廓的个数。

hierachy: 图像的拓扑信息(轮廓层次)。记录轮廓与轮廓之间的关系,每个轮廓(Contours列表的子元素)对应一个四个元素来说明当前轮廓的层次关系([next,Previous,First_child,parent])。轮廓的层次结构是由mode参数决定的。不同的mode得到的轮廓编号不一样,hierachy也不一样。

方法的参数:

image:原始图像。8位单通道图像,所有非零值被处理为1,所有零值保持不变。也就是灰度图会被自动处理为二值图像。我们通常可以用阈值处理等函数将待查轮廓的图像处理为二值图像。

mode: 轮廓检索模式。决定了轮廓的提取方式,具体有四种:cv2.RETR_EXTERNAL,只检测外轮廓;cv2.RETR_LIST,对检测到的轮廓不建立等级关系;cv2.RETR_CCOMP,检测所有轮廓并将它们组织成两级层次结构,上面一层为外边界,下面一层为内孔的边界。如果内孔内还有一个连通的物体,则这个物体的边界仍然位于顶层;cv2.RETR_TREE,建立一个等级树结构的轮廓。

method: 轮廓的近似方法。决定了如何表达轮廓,可以为如下值:

CV2.CHAIN_APPROX_NONE:储存所有的轮廓点,相邻两个点的像素位置差不超过1;

CV2.CHAIN_APPROX_SIMPLE:压缩水平方向、垂直方向、对角线方向的元素,只保留该方向的终点坐标(例如极端情况下可以用四个点保存轮廓信息);

CV2.CHAIN_APPROX_TC89_L1:使用tehCHINl chain近似算法的一种风格;

CV2.CHAIN_APPROX_TC89_KCOS:使用tehCHINl chain近似算法的一种风格。

2.绘制图像轮廓

在OpenCV中,可以使用函数cv2.drawContours()

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

参数:

image: 待绘制轮廓的图像。要注意,该函数会在图像image的基础上绘制轮廓,所以这里最好用原始图像的备份,以免改变原始图像。

contours: 需要绘制的轮廓,该参数类型与findContours()输出的contours相同,都是list;

contourIdx: 需要绘制的边缘索引,告诉该函数绘制那一条轮廓。若参数为负数(通常是-1),则表示绘制所有轮廓;

color: 绘制的颜色,用BGR表示;

thickness: j可选参数,表示绘制轮廓的画笔的粗细。如将该值设置为-1,则表示要绘制实心轮廓;

lineType: 可选参数,表示绘制轮廓时所用的线型

hierarchy: 对应函数cv2.findContours()输出的层次信息;

maxLevel:控制所绘制的轮廓层次的深度。如果值为0,表示仅绘制第0层德轮廓;如果为其他非零正数,表示绘制最高层及以下的相同数量层级的轮廓;

offset:偏移参数。该参数使轮廓偏移到不同位置展示出来。

3.实例

1)提取并绘制图像轮廓·:

代码
运行结果,绘制了152个轮廓

2)使用轮廓绘制功能,提取前景·对象:


代码

将contourIdx 设置为2,提取编号为2的轮廓;thickness设置为-1,将轮廓填充为实心,颜色为(255,255,255)。之后将mask与原图像进行一次与或按位运算,得到前景:

运行结果
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350