python-opencv(11)图像轮廓

简介: 文章目录1. 什么是轮廓2. 使用的函数3. 代码实现

1. 什么是轮廓

边缘检测能够检测出边缘,但是边缘不是连续的,如果我们将边缘 连接为一个整体,我们便构造出了轮廓。

注意

  1. 对于opencv来说构建轮廓的对象是二值图像。所以我们首先要进行阈值分割或者边缘检测的处理。
  2. 查找轮廓,会更改原始的图像,所以,我们们通常使用原始的图像,拷贝一份在进行操作。
  3. 在opencv中,是从黑色的背景中查找白色对象,因此对象必须是白色,而背景必须是黑色

2. 使用的函数

  1. cv2.findContours( ) 查找轮廓图像的函数。
  2. cv2.drawContours( ) 将查找到的轮廓绘制到图像上。

首先看第一个函数cv2.findContours( )

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

相关参数的释义

contours 为轮廓

hierarchy 为图像的拓扑信息(轮廓的层次)

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:使用teh-Chinl chain 近似算法

cv2.CHAIN_APPROX_TC89_KCOS:使用teh-Chinl chain 近似算法

2.r=cv2.drawContours(o, contours, contourIdx, color[, thickness])

r 为目标图像

o 原始图像

contours 需要绘制的边缘数组

contourldx 需要绘制的边缘索引,如果全部绘制,则为-1

color 绘制的颜色,位BGR格式的Scalar

thickness 可选,绘制是时所用的画笔的粗细

3. 代码实现

#%%图像轮廓的绘制
import cv2
import numpy as np
import os
img = cv2.imread(r"C:\\Users\\lihuanyu\\Desktop\\opencv\\image\\boyun.png")
#拷贝一份
img1 = img.copy()
#转换为黑色
gray = cv2.cvtColor(img1,cv2.COLOR_BGR2GRAY)
#阈值分割-二值化
ret,binary = cv2.threshold(gray,127,225,cv2.THRESH_BINARY)
#轮廓的提取
#image,contours,hierarchy = cv2.findContours(img2,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
contours, hierarchy =cv2.findContours(binary,cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
o=cv2.drawContours(img1,contours,-1,(0,255,0),5)
cv2.imshow("origial",img)
cv2.imshow("result",o)
cv2.waitKey()
cv2.destroyAllWindows()

结果

相关文章
|
2月前
|
计算机视觉
Opencv学习笔记(三):图像二值化函数cv2.threshold函数详解
这篇文章详细介绍了OpenCV库中的图像二值化函数`cv2.threshold`,包括二值化的概念、常见的阈值类型、函数的参数说明以及通过代码实例展示了如何应用该函数进行图像二值化处理,并展示了运行结果。
504 0
Opencv学习笔记(三):图像二值化函数cv2.threshold函数详解
|
3月前
|
机器学习/深度学习 算法 TensorFlow
动物识别系统Python+卷积神经网络算法+TensorFlow+人工智能+图像识别+计算机毕业设计项目
动物识别系统。本项目以Python作为主要编程语言,并基于TensorFlow搭建ResNet50卷积神经网络算法模型,通过收集4种常见的动物图像数据集(猫、狗、鸡、马)然后进行模型训练,得到一个识别精度较高的模型文件,然后保存为本地格式的H5格式文件。再基于Django开发Web网页端操作界面,实现用户上传一张动物图片,识别其名称。
109 1
动物识别系统Python+卷积神经网络算法+TensorFlow+人工智能+图像识别+计算机毕业设计项目
|
12天前
|
机器学习/深度学习 人工智能 算法
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
宠物识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了37种常见的猫狗宠物种类数据集【'阿比西尼亚猫(Abyssinian)', '孟加拉猫(Bengal)', '暹罗猫(Birman)', '孟买猫(Bombay)', '英国短毛猫(British Shorthair)', '埃及猫(Egyptian Mau)', '缅因猫(Maine Coon)', '波斯猫(Persian)', '布偶猫(Ragdoll)', '俄罗斯蓝猫(Russian Blue)', '暹罗猫(Siamese)', '斯芬克斯猫(Sphynx)', '美国斗牛犬
83 29
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
|
3月前
|
算法 计算机视觉
opencv图像形态学
图像形态学是一种基于数学形态学的图像处理技术,它主要用于分析和修改图像的形状和结构。
53 4
|
1月前
|
机器学习/深度学习 TensorFlow 算法框架/工具
利用Python和TensorFlow构建简单神经网络进行图像分类
利用Python和TensorFlow构建简单神经网络进行图像分类
56 3
|
2月前
|
存储 JSON API
Python| 如何使用 DALL·E 和 OpenAI API 生成图像(1)
Python| 如何使用 DALL·E 和 OpenAI API 生成图像(1)
64 7
Python| 如何使用 DALL·E 和 OpenAI API 生成图像(1)
|
3月前
|
机器学习/深度学习 人工智能 算法
植物病害识别系统Python+卷积神经网络算法+图像识别+人工智能项目+深度学习项目+计算机课设项目+Django网页界面
植物病害识别系统。本系统使用Python作为主要编程语言,通过收集水稻常见的四种叶片病害图片('细菌性叶枯病', '稻瘟病', '褐斑病', '稻瘟条纹病毒病')作为后面模型训练用到的数据集。然后使用TensorFlow搭建卷积神经网络算法模型,并进行多轮迭代训练,最后得到一个识别精度较高的算法模型,然后将其保存为h5格式的本地模型文件。再使用Django搭建Web网页平台操作界面,实现用户上传一张测试图片识别其名称。
140 22
植物病害识别系统Python+卷积神经网络算法+图像识别+人工智能项目+深度学习项目+计算机课设项目+Django网页界面
|
3月前
|
机器学习/深度学习 人工智能 算法
鸟类识别系统Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+ResNet50算法模型+图像识别
鸟类识别系统。本系统采用Python作为主要开发语言,通过使用加利福利亚大学开源的200种鸟类图像作为数据集。使用TensorFlow搭建ResNet50卷积神经网络算法模型,然后进行模型的迭代训练,得到一个识别精度较高的模型,然后在保存为本地的H5格式文件。在使用Django开发Web网页端操作界面,实现用户上传一张鸟类图像,识别其名称。
119 12
鸟类识别系统Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+ResNet50算法模型+图像识别
|
3月前
|
存储 计算机视觉
Opencv的基本操作(一)图像的读取显示存储及几何图形的绘制
本文介绍了使用OpenCV进行图像读取、显示和存储的基本操作,以及如何绘制直线、圆形、矩形和文本等几何图形的方法。
Opencv的基本操作(一)图像的读取显示存储及几何图形的绘制
|
2月前
|
JSON API 数据格式
Python| 如何使用 DALL·E 和 OpenAI API 生成图像(2)
Python| 如何使用 DALL·E 和 OpenAI API 生成图像(2)
57 0
Python| 如何使用 DALL·E 和 OpenAI API 生成图像(2)