当使用Python和OpenCV进行图像处理时,常常需要使用轮廓操作。本文将介绍PythonOpencv轮廓常用操作的代码实例。通过阅读本文,您将了解如何通过轮廓检测、绘制、筛选等常用操作,提取图像中的轮廓信息。
轮廓检测
在OpenCV中,cv2.findContours()
函数用于检测图像中的轮廓,其参数包括:
- 需要进行轮廓检测的图像
- 轮廓检测模式
- 轮廓近似方法
以下是一个轮廓检测的示例代码:
import cv2
image = cv2.imread('image.jpg')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
ret, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
以上代码中,首先读入一张图片并将其转换成灰度图像,然后使用二值化方法(cv2.threshold()
)将图像进行处理。最后,使用cv2.findContours()
函数检测图像中的轮廓,返回的轮廓信息包括contours
和hierarchy
两个值。
轮廓绘制
使用cv2.drawContours()
函数可以将检测到的轮廓绘制在原图像上,其参数包括:
- 原图像
- 要绘制的轮廓
- 轮廓索引(-1表示绘制所有轮廓)
- 绘制颜色
- 绘制线条宽度
以下是一个轮廓绘制的示例代码:
import cv2
image = cv2.imread('image.jpg')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
ret, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
cv2.drawContours(image, contours, -1, (0, 255, 0), 2)
cv2.imshow('image', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
以上代码中,使用cv2.drawContours()
函数将检测到的轮廓绘制在原图像上。-1
表示绘制所有轮廓,绘制颜色为绿色,线条宽度为2个像素。最后使用cv2.imshow()
函数显示结果图,并等待用户按下任意键关闭窗口。
轮廓筛选
轮廓检测得到的轮廓信息包括很多无用的轮廓,为了只提取出需要的轮廓,需要进行轮廓筛选。轮廓筛选的方法包括面积筛选、周长筛选和形状筛选等。
以下是一个轮廓面积筛选的示例代码:
import cv2
image = cv2.imread('image.jpg')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
ret, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
for i in range(len(contours)):
area = cv2.contourArea(contours[i])
if area > 100:
cv2.drawContours(image, contours, i, (0, 255, 0), 2)
cv2.imshow('image', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
以上代码中,首先进行轮廓检测,然后使用循环遍历得到的所有轮廓。计算每个轮廓的面积并与阈值比较,如果大于100,就将该轮廓绘制在原图像上。
另一个示例是轮廓周长筛选,以下是示例代码:
import cv2
image = cv2.imread('image.jpg')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
ret, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
for i in range(len(contours)):
perimeter = cv2.arcLength(contours[i], True)
if perimeter > 50:
cv2.drawContours(image, contours, i, (0, 255, 0), 2)
cv2.imshow('image', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
以上代码中,使用cv2.arcLength()
函数计算每个轮廓的周长,并与阈值比较。如果周长大于50,就将该轮廓绘制在原图像上。
通过本文的介绍,我们了解了PythonOpencv轮廓的常用操作,包括轮廓检测、绘制和筛选等。使用这些操作能够很好地提取图像中的轮廓信息,并进一步进行图像处理。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python Opencv轮廓常用操作代码实例解析 - Python技术站