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()