基于opencv的轮廓识别系统python 效果如图

在计算机视觉领域,轮廓识别是一项基础且重要的任务,OpenCV作为强大的计算机视觉库,提供了丰富的工具来实现这一功能。今天就来唠唠基于OpenCV的Python轮廓识别系统。

环境准备

首先,确保你安装了OpenCV库。如果没有,可以使用pip安装:

pip install opencv - python

轮廓识别代码实现

下面是一个简单的轮廓识别代码示例:

import cv2
import numpy as np


def contour_detection():
    # 读取图像
    img = cv2.imread('test.jpg')
    # 转换为灰度图像
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    # 使用高斯模糊平滑图像
    blurred = cv2.GaussianBlur(gray, (5, 5), 0)
    # 使用Canny边缘检测算法检测边缘
    edges = cv2.Canny(blurred, 50, 150)
    # 寻找轮廓
    contours, _ = cv2.findContours(edges, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
    # 在原图上绘制轮廓
    cv2.drawContours(img, contours, -1, (0, 255, 0), 2)
    # 显示结果图像
    cv2.imshow('Contour Detection', img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()


if __name__ == '__main__':
    contour_detection()

代码分析

  1. 读取图像img = cv2.imread('test.jpg') 这行代码从本地读取一张名为 test.jpg 的图像。这里的图像路径要根据实际情况调整,如果图像和代码在同一目录下,直接写文件名即可。
  2. 灰度转换gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) OpenCV读取的彩色图像默认是BGR格式,而许多图像处理操作在灰度图像上进行更方便。这行代码将彩色图像转换为灰度图像。
  3. 高斯模糊blurred = cv2.GaussianBlur(gray, (5, 5), 0) 图像中可能存在噪声,高斯模糊可以平滑图像,减少噪声的影响。(5, 5) 是高斯核的大小,值越大,模糊效果越明显,但也可能会丢失一些细节。
  4. Canny边缘检测edges = cv2.Canny(blurred, 50, 150) Canny算法用于检测图像中的边缘。这里的 50150 分别是低阈值和高阈值,低阈值用于连接边缘片段,高阈值用于确定强边缘。合适的阈值设置对准确检测边缘很关键,如果阈值设置不当,可能会检测到过多或过少的边缘。
  5. 寻找轮廓contours, = cv2.findContours(edges, cv2.RETRTREE, cv2.CHAINAPPROXSIMPLE) 这行代码寻找图像中的轮廓。cv2.RETRTREE 表示轮廓检索模式,它会建立一个轮廓树结构,包含轮廓之间的层次关系。cv2.CHAINAPPROX_SIMPLE 是轮廓近似方法,它会压缩水平、垂直和对角方向的轮廓点,只保留端点,这样可以减少数据量。
  6. 绘制轮廓cv2.drawContours(img, contours, -1, (0, 255, 0), 2) 在原图上绘制找到的轮廓。-1 表示绘制所有轮廓,(0, 255, 0) 是轮廓的颜色(这里是绿色),2 是轮廓线的粗细。
  7. 显示图像cv2.imshow('Contour Detection', img)cv2.waitKey(0) 以及 cv2.destroyAllWindows() 用于显示绘制了轮廓的图像,并等待用户按键后关闭窗口。

通过以上步骤,我们就实现了一个简单的基于OpenCV的轮廓识别系统。当然,在实际应用中,可能还需要根据具体需求对代码进行优化和扩展,比如对轮廓进行筛选、计算轮廓的特征等。希望这篇博文能帮助你快速上手轮廓识别,开启计算机视觉的有趣之旅!

基于opencv的轮廓识别系统python 效果如图

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐