在OpenCV中轮廓处理

news/2024/12/18 10:36:49/

在OpenCV中轮廓处理

函数主要包括以下几个:

  1. 阈值化:将图像转换为二值图像,以便更容易地检测轮廓。
  2. 形态学操作:使用形态学操作(如开运算)来去除噪声。
  3. 边缘检测:使用Canny边缘检测算法来检测图像中的边缘。
  4. 查找轮廓:使用cv2.findContours函数来查找图像中的轮廓。
  5. 绘制轮廓:使用cv2.drawContours函数在图像上绘制轮廓。
  6. 轮廓近似:使用cv2.approxPolyDP函数来近似轮廓为多边形。
  7. 计算属性:计算轮廓的周长和面积,并在图像上显示这些信息。

下面是代码的详细解释:

import cv2# 读取图像
image = cv2.imread('path_to_image.jpg')# 将图像转换为灰度图像
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# 使用阈值化方法进行二值化
_, binary_image = cv2.threshold(gray_image, 127, 255, cv2.THRESH_BINARY)# 定义结构元素
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3))# 开运算
opening = cv2.morphologyEx(binary_image, cv2.MORPH_OPEN, kernel)# 使用Canny边缘检测
edges = cv2.Canny(opening, 100, 200)# 查找轮廓
contours, _ = cv2.findContours(edges, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)# 绘制轮廓
cv2.drawContours(image, contours, -1, (0, 255, 0), 2)# 遍历每个轮廓
for contour in contours:# 近似轮廓为多边形epsilon = 0.02 * cv2.arcLength(contour, True)approx = cv2.approxPolyDP(contour, epsilon, True)# 如果近似的多边形有四个顶点,则认为是四边形if len(approx) == 4:# 计算周长perimeter = cv2.arcLength(contour, True)# 计算面积area = cv2.contourArea(contour)# 在图像上显示周长和面积x, y, w, h = cv2.boundingRect(contour)cv2.putText(image, f': {perimeter:.2f}', (x, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0, 255, 0), 2)# 显示图像
cv2.imshow('Contours', image)
cv2.waitKey(0)
cv2.destroyAllWindows()

关键函数解释:

  1. cv2.threshold:将灰度图像转换为二值图像。
  2. cv2.getStructuringElement:定义结构元素,用于形态学操作。
  3. cv2.morphologyEx:进行形态学操作,如开运算。
  4. cv2.Canny:进行Canny边缘检测。
  5. cv2.findContours:查找图像中的轮廓。
  6. cv2.drawContours:在图像上绘制轮廓。
  7. cv2.approxPolyDP:近似轮廓为多边形。
  8. cv2.arcLength:计算轮廓的周长。
  9. cv2.contourArea:计算轮廓的面积。
  10. cv2.boundingRect:计算轮廓的外接矩形。
  11. cv2.putText:在图像上绘制文本。

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

相关文章

day12-历史排行榜

1. 数据存储方案 1.1 分区 1.1.1 优点 (1)水平拆分,逻辑上还是一张表,业务中的sql语句不需要改变 (2)提高数据检索、统计的性能 (3)打破磁盘容量限制,不同的分区可以…

Java语言程序设计进阶篇_编程练习题19.2(使用继承实现GenericStack)

目录 题目 : 19.2(使用继承实现GenericStack) 代码示例 编程练习题19_2.java 编程练习题19_2Test.java 输出结果: 题目 : 19.2(使用继承实现GenericStack) /*19.2 * 程序清单19-1中&#…

如何使用通义千问 AI 生成 PPT 并发布到个人网站

使用通义千问 AI 快速生成 PPT,并通过 Canva 调整后嵌入 Hugo 网站,展示高效方法。 阅读原文请转到:https://jimmysong.io/blog/ai-ppt-to-hugo/ 以下是使用通义千问 AI 快速生成 PPT 并将其发布到个人网站的简单流程: 使用通义千…

访问控制列表ACL

学习新思想,争做新青年。今天学习访问控制列表ACL 实验拓扑 实验要求 ①允许三台PC访问FTP和WEB ②不允许三台PC访问FTP和WEB ③允许PC1访问,不允许PC2PC3访问 ④允许PC1访问FTP,PC2PC3访问WEB,不允许PC1访问WEB,PC2…

MATLAB转换C语言--问题(一)FFT 和 IFFT 的缩放因子

1. MATLAB 中的 FFT 和 IFFT 在 MATLAB 中,fft 和 ifft 函数具有以下缩放行为: fft:执行快速傅里叶变换(FFT),不进行缩放。ifft:执行逆快速傅里叶变换(IFFT),…

java中File类

1、介绍 File类定义了一些与平台无关的方法来操作文件,可以通过调用File类中的方法,实现创建、删除、重命名文件等操作。File类的对象主要用来获取文件本身的一些信息,如文件所在的目录、文件长度、文件读写权限等。数据流可以将数据写入到文…

django——admin后台管理1

一、admin后台管理 访问url进入: http://127.0.0.1:8000/admin ​ 创建超级管理用户 终端输入以下命令: python manage.py createsuperuser (py36_pingping) E:\django学习\day03-django入门\demo>python manage.py createsuperuser Username: mo…