当前位置: 首页 > article >正文

在OpenCV中轮廓处理

在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.kler.cn/a/440733.html

相关文章:

  • 设计模式学习[13]---抽象工厂模式+简单工厂+工厂方法模式回顾
  • 【在 Vue3 的计算属性中传递参数】
  • CompletableFuture异步业务 默认ForkJoinPool 导致类加载器加载类失败
  • 起售停售套餐
  • tij15_泛型
  • Java性能调优 - JVM性能监测及调优
  • React Native学习路线图
  • 计算机组成原理(八):加法器
  • ps案例制作
  • centos使用mkisofs构建无人值守镜像(附官方学习文档)
  • python webdriver-manager 实现selenium 免下载安装webdriver
  • 51c视觉~合集31
  • 【C++】红黑树(万字)
  • 【AIStarter】3.2.1版本更新:告别Bug,提升用户体验
  • 前端(七)定位流
  • 单片机:实现utf-8转gb2312(附带源码)
  • 银河麒麟桌面操作系统添加WPS字体
  • 如何在 Ubuntu 上安装 OpenSearch 开源的搜索引擎
  • BGP-面试
  • Zookeeper其二,zk的java和选举机制,Hadoop的高可用和联邦机制