关键词

Python Opencv轮廓常用操作代码实例解析

当使用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()函数检测图像中的轮廓,返回的轮廓信息包括contourshierarchy两个值。

轮廓绘制

使用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轮廓的常用操作,包括轮廓检测、绘制和筛选等。使用这些操作能够很好地提取图像中的轮廓信息,并进一步进行图像处理。

本文链接:http://task.lmcjl.com/news/16732.html

展开阅读全文