OpenCV图像轮廓提取的实现
图像轮廓是一组表示图像形状的点的连续曲线。在图像处理中,轮廓提取是非常重要的步骤,可以用来识别图像中的目标物体,检测边缘和形状等。OpenCV是一种流行的图像处理库,它提供了功能强大的图像轮廓提取功能。以下是OpenCV图像轮廓提取的完整攻略。
步骤1:读取图像
首先,你需要导入OpenCV和numpy库,并使用imread函数从文件中读取图像。例如,下面是读取名为“image.jpg”的图像的示例代码:
import cv2
import numpy as np
img = cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE)
步骤2:二值化图像
接下来,将图像转换为灰度图像,并使用阈值技术将灰度图像转换为二值图像。这可以通过以下代码实现:
ret, thresh = cv2.threshold(img, 127, 255, 0)
这里将灰度值大于127的像素点设置为255,其他像素点设置为0,得到了二值图像。
步骤3:寻找轮廓
一旦图像被二值化,就可以使用findContours()函数来查找轮廓。该函数有三个输入参数:二值化图像、轮廓检索模式和轮廓近似方法。它返回两个输出,第一个是轮廓本身,第二个是每个轮廓的层次结构。
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
步骤4:绘制轮廓
最后,我们可以使用drawContours()函数在输入图像上绘制轮廓。这个函数有五个参数:输入图像、轮廓、轮廓索引、颜色、线条厚度。
cv2.drawContours(img, contours, -1, (0, 255, 0), 3)
这里将绘制所有轮廓,并将其绘制为绿色线条。
示例1:检测手写数字图像中的数字
import cv2
import numpy as np
# 读取图像
img = cv2.imread('number.png')
# 将图像转换为灰度图像
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()
示例2:检测圆形
import cv2
import numpy as np
# 创建一张空白图像
img = np.zeros((512, 512, 3), np.uint8)
# 绘制一个圆形
cv2.circle(img, (256, 256), 100, (255, 255, 255), -1)
# 将图像转换为灰度图像
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()
以上是OpenCV图像轮廓提取的完整攻略,可以用于检测图像中的目标物体,检测边缘和形状等。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:OpenCV图像轮廓提取的实现 - Python技术站