轮廓检测

Canny 之类的边缘检测算法可以根据像素间的差异检测出轮廓边界,但是它并没有将轮廓作为一个整体

轮廓是构成任何一个形状的边界或外形线。直方图对比和模板匹配根据色彩的分布来进行匹配,以下包括:轮廓的查找、

表达方式、组织方式、绘制、特性、匹配。

查找轮廓

可以使用OpenCV 自带的  cv2.findContours 函数来查找检测物体的轮廓。

cv2.findContours() 函数接受的参数为二值图,即黑白的(不是灰度图),所以读取的图像要转成灰度的,再转成二值图。

cv2.findContours() 函数原型:

contours, hierarchy = cv2.findContours(image, mode, method[, contours[, hierarchy[, offset ]]])

参数: 
  image -- 要查找轮廓的原图像

mode -- 轮廓的检索模式,它有四种模式:

cv2.RETR_EXTERNAL  表示只检测外轮廓

cv2.RETR_LIST 检测的轮廓不建立等级关系

cv2.RETR_CCOMP 建立两个等级的轮廓,上面的一层为外边界,里面的一层为内孔的边界信息。如果内孔内还有一个连通物体,

这个物体的边界也在顶层。

cv2.RETR_TREE 建立一个等级树结构的轮廓。

method --  轮廓的近似办法:

cv2.CHAIN_APPROX_NONE 存储所有的轮廓点,相邻的两个点的像素位置差不超过1,即max (abs (x1 - x2), abs(y2 - y1) == 1

cv2.CHAIN_APPROX_SIMPLE压缩水平方向,垂直方向,对角线方向的元素,只保留该方向的终点坐标,例如一个矩形轮廓只需

4个点来保存轮廓信息

cv2.CHAIN_APPROX_TC89_L1,CV_CHAIN_APPROX_TC89_KCOS使用teh-Chinl chain 近似算法

返回值:

cv2.findContours()函数返回两个值:

contours -- 轮廓本身,它是一个list,list 中每个元素都是图像中的一个轮廓,用Numpy中的ndarray表示 ,每个轮廓是一个ndarray,每个ndarray

是轮廓上的点的集合。轮廓中并不存储轮廓上所有的点,而只存储可以用直线描述轮廓的点的个数,比如一个“正立”的矩形只有4个

点元素。

             print (type(contours))  print (type(contours[0]))  print (len(contours))    # 输出list 中轮廓的个数print (len(contours[0])) # 输出第一个轮廓中的元素的个数, 

hierarchy -- 每条轮廓对应的属性。这是一个ndarray 是个可选返回结果,其中的元素个数和轮廓个数相同,每个轮廓contours[i] 对应4个hierarchy

元素hierarchy[i][0] ~ hierarchy[i][3] ,分别表示后一个轮廓、前一个轮廓、父轮廓、内嵌轮廓的索引编号,如果没有对应项,则该值为

负数。

             print (type(hierarchy))  print (hierarchy.ndim)#3  print (hierarchy[0].ndim)  #2print (hierarchy.shape)  # (1,2,4)

轮廓绘制

OpenCV 使用 cv2.drawContours 在图像上绘制轮廓

cv2.drawContours() 函数原型:

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

参数:
  image -- 要绘制轮廓的图像

contours -- 轮廓本身,在Python 中是一个list

contourIdx -- 指定绘制轮廓 list 中的哪条轮廓,如果是 -1,则绘制其中的所有轮廓。

color -- 绘制的颜色及级宽度的属性

thickness -- 绘制轮廓线的宽度,如果是 -1 (cv2.FILLED),则为填充模式。

使用示例:

#!/usr/bin/env python
# encoding: utf-8
import cv2
import numpy as np img = cv2.imread('33.jpg')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)  # 转成灰度图像
ret, binary = cv2.threshold(gray,127,255,cv2.THRESH_BINARY) #将灰度图像转成二值图像  contours, hierarchy = cv2.findContours(binary,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE) # 查找轮廓
cv2.drawContours(img,contours,-1,(0,0,255),3)  cv2.imshow("img", img)
cv2.waitKey(0)  

结果效果图:

参考和转载:

http://blog.csdn.net/sunny2038/article/details/12889059

Python OpenCV -- 轮廓检测 (十四)相关推荐

  1. python opencv轮廓检测_OpenCV 轮廓检测的实现方法

    轮廓概述 轮廓可以简单认为成将连续的点(连着边界)连在一起的曲线,具有相同的颜色或者灰度.轮廓在形状分析和物体的检测和识别中很有用. 为了更加准确,要使用二值化图像.在寻找轮廓之前,要进行阈值化处理或 ...

  2. python opencv 轮廓检测_opencv之轮廓检测与处理

    查找图像的轮廓在图像处理及应用中扮演着重要的角色. opencv中 查找轮廓的函数提供的是cv::findContours() 把查找的轮廓划到图像上cv::drawContours() 1.轮廓的查 ...

  3. python opencv轮廓检测_python opencv 来对图片(苹果)的轮廓(最大轮廓进行识别)进行...

    import cv2 as cv import numpy as np # canny边缘检测 def canny_demo(image): t = 140 canny_output = cv.Can ...

  4. OpenCV学习(二十四 ):角点检测(Corner Detection):cornerHarris(),goodFeatureToTrack()

    OpenCV学习(二十四 ):角点检测(Corner Detection):cornerHarris(),goodFeatureToTrack() 参考博客: Harris角点检测原理详解 Harri ...

  5. Python OpenCv 车牌检测识别(边缘检测、HSV色彩空间判断)

    Python OpenCv 车牌检测识别 背景 车牌识别在交通.停车等方面有着广泛应用,在网上也有很多种基于OpenCV方案进行识别,本文是综合了两种比较流行的方案,首先是提取出疑似车牌区域的轮廓,然 ...

  6. SVM 支持向量机算法(Support Vector Machine )【Python机器学习系列(十四)】

    SVM 支持向量机算法(Support Vector Machine )[Python机器学习系列(十四)] 文章目录 1.SVM简介 2. SVM 逻辑推导 2.1 Part1 化简限制条件 2.2 ...

  7. python自动华 (十四)

    Python自动化 [第十四篇]:HTML介绍 本节内容: Html 概述 HTML文档 常用标签 2. CSS 概述 CSS选择器 CSS常用属性 1.HTML 1.1概述 HTML是英文Hyper ...

  8. python接口自动化测试二十四:上传多个附件,参数化

    python接口自动化测试二十四:上传多个附件,参数化 # 添加多个附件参数化files = [("1.png", "1.png") ("2.png& ...

  9. OpenCV-Python实战(11)——OpenCV轮廓检测相关应用

    OpenCV-Python实战(11)--OpenCV轮廓检测相关应用 0. 前言 1. 轮廓绘制 2. 轮廓筛选 3. 轮廓识别 4. 轮廓匹配 小结 系列链接 0. 前言 在计算机视觉领域,轮廓通 ...

最新文章

  1. 汤家凤高等数学基础手写笔记-微分方程
  2. 基于 ASK + EB 构建容器事件驱动服务
  3. Java实现归并排序 Merge Sort
  4. Qt操作SQLite数据库练习(20200215)
  5. python发红包问题_一个关于红包的问题引发的python算法初体验
  6. new TypeToken<List>>(){}.getType() 是什么意思
  7. 首销价1999元起!OPPO K9 Pro开启预售:搭载天玑1200芯片
  8. 2020年朋友圈十大谣言:包括蚊蝇可以传播新冠病毒等
  9. Bailian2694 逆波兰表达式(POJ NOI0202-1696, POJ NOI0303-1696)【文本】
  10. Awesome-Windows
  11. 401.3 您未被授权查看该页 错误原因和解决方案
  12. 给大家分享一篇 用Python抓取漫画并制作mobi格式电子书
  13. win11激活office出问题
  14. 【DBC专题】-5-DBC文件格式解析
  15. 翻译:Pong Game Tutorial
  16. 计算机英语pork,pork是什么意思_pork的翻译_音标_读音_用法_例句_爱词霸在线词典...
  17. TypeScript 初级教程-姜威-专题视频课程
  18. 教你用笔记本电脑VMware虚拟机挖Polar Chain
  19. 基于python的npcap库与dpkt库实现抓包及存储
  20. 中国剩余定理及扩展中国剩余定理

热门文章

  1. weld_玩Weld-Probe –一站式查看CDI的所有方面
  2. 网站安全服务应该如何安全储存用户数据
  3. #7-8 复数四则运算 (10分)
  4. EOS数据分析——让RAM再飞一会儿
  5. 自恢复保险丝(PPTC)主要参数详解
  6. Geoserver2.15.0下载,安装与发布地图服务
  7. Linker Linking (a detail introduction)
  8. matlab中substring函数,MATLAB 有什么奇技淫巧?
  9. 自学UI设计和培训学UI设计的区别?
  10. java 打印gc_输出Java的GC信息