opencv-图像轮廓

news/2025/2/28 2:56:53/

轮廓可以简单认为成将连续的点(连着边界)连在一起的曲线,具有相同的颜色或者灰度。轮廓在形状分析和物体的检测和识别中很有用。
• 为了更加准确,要使用二值化图像。在寻找轮廓之前要进行阈值化处理或者 Canny 边界检测
• 查找轮廓的函数会修改原始图像。如果你在找到轮廓之后还想使用原始图像的话,你应该将原始图像存储到其他变量中。
• 在 OpenCV 中,查找轮廓就像在黑色背景中超白色物体。你应该记住,要找的物体应该是白色而背景应该是黑色。
让我们看看如何在一个二值图像中查找轮廓:
cv2.findContours() 是 OpenCV 中用于查找图像中轮廓的函数。该函数的基本语法如下:

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: 存储所有的轮廓点。
    • cv2.CHAIN_APPROX_SIMPLE: 压缩水平、垂直和斜率方向的元素,只保留其端点。
    • cv2.CHAIN_APPROX_TC89_L1cv2.CHAIN_APPROX_TC89_KCOS: 应用 Teh-Chin 链逼近算法。
  • contours: 输出参数,存储检测到的轮廓。
  • hierarchy: 输出参数,存储轮廓的层次信息。
  • offset: 可选参数,偏移值,通常不需要使用。
import cv2
# 读取图像
img = cv2.imread( r"C:\Users\mzd\Desktop\opencv\images.jpg")
# 将图像转换为灰度
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 使用阈值处理图像
ret, thresh = cv2.threshold(gray, 127, 255, 0)# 查找轮廓
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)# 在原始图像上绘制轮廓
cv2.drawContours(img, contours, -1, (0, 255, 0), 2)# 显示原始图像和带有轮廓的图像
cv2.imshow('Original Image', img)
cv2.imshow('Contour Image', thresh)# 等待用户按下任意键
cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述

这个示例演示了如何使用 cv2.findContours() 函数查找图像中的轮廓,并使用 cv2.drawContours() 函数在原始图像上绘制这些轮廓。


http://www.ppmy.cn/news/1234730.html

相关文章

C语言二十三弹---求第N项斐波那契数列的值

C语言求第N项斐波那契数列的值 定义:斐波那契数列指的是这样一个数列:1,1,2,3,5,8,13,21,34,55,89…自然中的斐波那契数列&#xff0…

Python基础【二】--基本语句【2023.11.22】

1.条件语句 在进行逻辑判断时,我们需要用到条件语句,Python 提供了 if、elif、else 来进行逻辑判断。格式如下所示: if 判断条件1:执行语句1... elif 判断条件2:执行语句2... elif 判断条件3:执行语句3... else:执行语句4...ainput("请输…

ubuntu 20.04 搭建crash dump问题分析环境

ubuntu 20.04 搭建crash dump问题分析环境 1 安装依赖软件1.1 linux-dump1.2 kexec-tools1.3 安装crash工具1.4 安装gdb调试工具1.5 安装ubuntu内核调试符号1.5.1 GPG 秘钥导入1.5.2 添加仓库配置1.5.3 更新软件包1.5.4 下载和安装内核调试符号1.5.5 验证内核调试符号已经被安装…

Java --- JVM之垃圾回收相关知识概念

目录 一、System.gc() 二、内存溢出与内存泄漏 2.1、内存溢出 2.2、内存泄漏 三、Stop the world 四、垃圾回收的并行与并发 4.1、并发 4.2、并行 4.3、并行 vs 并发 4.4、垃圾回收的并发与并行 五、安全点与安全区域 5.1、安全点 5.2、安全区域 六、引用 6.1…

数据结构重点知识点复习——第二章 线性表(顺序表)

目录 一、线性表 二、基本概念 2.1顺序表的插入 思路 代码 复杂度 2.2顺序表的删除 思路 代码 复杂度 查找 一、线性表 二、基本概念 线性表的顺序存储又称为顺序表。 它是用一组地址连续的存储单元(比如C语言里面的数组),依次存储线性表…

【GUI】-- 13 贪吃蛇小游戏之食物及成绩判断

GUI编程 04 贪吃蛇小游戏 4.4 第四步:食物及成绩判断 首先,添加食物与分数的数据定义: //食物的坐标int foodX;int foodY;Random random new Random();//积分面板数据结构int score;在初始化方法中,添加(画出)食物与分数&…

【NLP】GPT 模型如何工作

介绍 2021 年,我使用 GPT 模型编写了最初的几行代码,那时我意识到文本生成已经达到了拐点。我要求 GPT-3 总结一份很长的文档,并尝试了几次提示。我可以看到结果比以前的模型先进得多,这让我对这项技术感到兴奋,并渴望…

用于 syslog 收集的协议:TCP、UDP、RELP

系统日志是从 Linux/Unix 设备和其他网络设备(如交换机、路由器和防火墙)生成的日志 可以通过将 syslog 聚合到称为 syslog 服务器、syslog 守护程序或 syslogd 的服务器来集中 syslog。在TCP、UDP和RELP协议的帮助下,系统日志从设备传输到系…