Python使用Opencv实现边缘检测以及轮廓检测的实现

1. Opencv介绍

OpenCV是一个由Intel开源发行的计算机视觉库,它是由一些预先编写好的函数集和一些用C、C++、Python等语言编写的工具集构成。OpenCV中包含的大部分算法都跟图像和视频处理有关,例如:特征识别、目标检测、移动跟踪、图像分割等。

2. 边缘检测介绍

边缘检测是图像处理和计算机视觉领域中非常常见的算法,其目的是检测图像中的边缘或者轮廓等信息。

2.1 Canny边缘检测算法

Canny算法是一种流行的边缘检测算法,由John F. Canny在1986年提出。该算法在对图像像素进行梯度计算之后,利用非极大值抑制、双阈值法以及连通性来检测边缘。在实际应用中,Canny算法仍然是一种最常用的边缘检测算法。

import cv2

img = cv2.imread('lena.jpg', 0)

edges = cv2.Canny(img, 100, 200)

cv2.imshow('Edges', edges)

cv2.waitKey(0)

cv2.destroyAllWindows()

3. 轮廓检测介绍

在图像处理和计算机视觉领域中,轮廓检测是一种非常重要的算法。轮廓检测算法可以在图像中检测出各种物体的周围轮廓信息,并将其表示为点集、线段、周长或面积等形式进行描述。

3.1 轮廓检测基础

在OpenCV中,可以使用findContours()函数来进行轮廓检测。findContours函数的参数说明如下:

img: 输入的二值图像,轮廓检测操作将在该图像上进行。

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_L1、cv2.CHAIN_APPROX_TC89_KCOS:使用Teh-Chin链逼近算法。

contours: 输出的轮廓,为一个Python列表序列化,内部每个元素都是图片中每个轮廓的点集。

hierarchy: 输出每个轮廓的信息,为一个Python列表。

import cv2

img = cv2.imread('lena.jpg')

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

ret, thresh = cv2.threshold(gray, 127, 255, 0)

contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

cv2.drawContours(img, contours, -1, (0, 255, 0), 3)

cv2.imshow('Image', img)

cv2.waitKey(0)

cv2.destroyAllWindows()

后端开发标签