OpenCv之图像轮廓

目录

一、图像轮廓定义

二、绘制轮廓

三、计算轮廓面积与周长


一、图像轮廓定义

图像轮廓是具有相同颜色或灰度的连续带你的曲线.轮廓在形状分析和物体的检测和识别中很有用

轮廓的作用:

  • 用于图形分析
  • 物体的识别与检测

注意点:

  • 为了检测的准确性,需要先对图像进行二值化或Canny操作
  • 画轮廓是会修改输入的图像,如果之后想继续使用原始图像,应该将原始图像储存到其他变量中。

案例代码如下:

python 复制代码
import cv2
import numpy as np

# 该图像显示效果是黑白的,但是实际上确实三个通道的彩色图像
img = cv2.imread('6.jpg')

# 变成单通道的黑白图片
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

# 二值化,注意有两个返回值,阈值和结果
ret,binary = cv2.threshold(gray,150,255,cv2.THRESH_BINARY)

# 轮廓查找,新版本返回两个结果,轮廓和层级,老版本返回三个 参数,图像,轮廓和层级
result,contours,hierarchy = cv2.findContours(binary,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)

# 打印轮廓
print(contours)

# 释放资源
cv2.waitKey(0)
cv2.destroyAllWindows()

二、绘制轮廓

参照函数:

代码案例如下:

python 复制代码
import cv2
import numpy as np

# 该图像显示效果是黑白的,但是实际上确实三个通道的彩色图像
img = cv2.imread('6.jpg')

# 变成单通道的黑白图片
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

# 二值化,注意有两个返回值,阈值和结果
ret,binary = cv2.threshold(gray,150,255,cv2.THRESH_BINARY)

# 轮廓查找,新版本返回两个结果,轮廓和层级,老版本返回三个 参数,图像,轮廓和层级
result,contours,hierarchy = cv2.findContours(binary,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)

# 打印轮廓
# print(contours)

# 绘制轮廓会直接修改原图
# 如果想保持原图不变,建议copy一份
img_copy = img.copy()
cv2.drawContours(img_copy,contours,-1,(0,0,255),2)

# 释放资源
cv2.waitKey(0)
cv2.destroyAllWindows()

三、计算轮廓面积与周长

轮廓面积是指每个轮廓中所有的像素点围成区域的面积,单位为像素

案例代码如下:

python 复制代码
import cv2
import numpy as np

# 该图像显示效果是黑白的,但是实际上确实三个通道的彩色图像
img = cv2.imread('6.jpg')

# 变成单通道的黑白图片
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

# 二值化,注意有两个返回值,阈值和结果
ret,binary = cv2.threshold(gray,150,255,cv2.THRESH_BINARY)

# 轮廓查找,新版本返回两个结果,轮廓和层级,老版本返回三个 参数,图像,轮廓和层级
result,contours,hierarchy = cv2.findContours(binary,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)

# 绘制轮廓会直接修改原图
# 如果想保持原图不变,建议copy一份
img_copy = img.copy()
cv2.drawContours(img_copy,contours,1,(0,0,255),2)

# 计算轮廓面积
area = cv2.contourArea(contours[1])

# 计算轮廓周长
perimeter = cv2.arcLength(contours[1],closed=True)

# 释放资源
cv2.waitKey(0)
cv2.destroyAllWindows()
相关推荐
宸津-代码粉碎机2 分钟前
Java内部类内存泄露深度解析:原理、场景与根治方案(附GC引用链分析)
java·开发语言·jvm·人工智能·python
ShiMetaPi21 分钟前
ShimetaPi丨事件相机新版SDK发布:支持Python调用,可降低使用门槛
深度学习·计算机视觉·事件相机·evs
致Great35 分钟前
强化学习(RL)简介及其在大语言模型中的应用
人工智能·语言模型·自然语言处理·大模型
JJJJ_iii42 分钟前
【机器学习11】决策树进阶、随机森林、XGBoost、模型对比
人工智能·python·神经网络·算法·决策树·随机森林·机器学习
咚咚王者1 小时前
人工智能之编程基础 Python 入门:第五章 基本数据类型(一)
人工智能·python
说私域1 小时前
基于开源链动2+1模式AI智能名片S2B2C商城小程序的零售流量重构研究
人工智能·小程序·开源
Funny_AI_LAB1 小时前
Anthropic 最新研究深度解析:大型语言模型中涌现的内省意识
人工智能·语言模型·自然语言处理
skywalk81632 小时前
划时代的AI Agent qwen的回答和思考
人工智能
张较瘦_2 小时前
[论文阅读] AI | 大语言模型服务系统服务级目标和系统级指标优化研究
论文阅读·人工智能·语言模型
golang学习记2 小时前
Cursor 2.0正式发布:携自研模型Composer强势登场,不再只做「壳」
人工智能