OpenCV for Python之图像轮廓

Opencv4 官方文档 : https://docs.opencv.org/4.2.0/
Opencv4 for Python中文文档点击下载:OpenCV4 for Python 中文文档

1 图像轮廓

. 轮廓可以简单认为成将连续的点(连着边界)连在一起的曲线,具有相同 的颜色或者灰度。
. 轮廓在形状分析和物体的检测和识别中很有用。
. 为了更加准确,要使用二值化图像。在寻找轮廓之前,要进行阈值化处理或者 Canny 边界检测
. 查找轮廓的函数会修改原始图像。如果你在找到轮廓之后还想使用原始图像的话,
你应该将原始图像存储到其他变量中.
. 在 OpenCV 中,查找轮廓就像在黑色背景中超白色物体。要找的物体应该是白色,而背景应该是黑色
.发现轮廓:cv.findContours();绘制轮廓:cv.drawContours()

2 相关api

cv.findContours(image, mode, method, contours=None, hierarchy=None, offset=None)
  1. 参数:
  • image:输入图像;
  • mode:轮廓检索模式;
  • method:轮廓近似方法;
  • contours:-
  • hierarchy:-
  • offset:每一个轮廓点的偏移量. 当轮廓是从图像 ROI 中提取出来的时候,使用偏移量有用,因为可以从整个图像上下文来对轮廓做分析
  1. 返回值:
    返回值有三个,第一个是图像,第二个是轮廓,第三个是(轮廓的)层析结构。 轮廓(第二个返回值)是一个 Python 列表,其中存储这图像中的所有轮廓。 每一个轮廓都是一个 Numpy 数组,包含对象边界点(x,y)的坐标。

3 轮廓周长:

也成为了弧长,用以下api可直接获取

perimeter = cv.arcLength(cnt,True)

4 轮廓构成面积

直接api获取:

area = cv.contourArea(cnt)

还有很多属性等,暂时先略过

5 demo

demo:


def edge_demo(image):
    blurred = cv.GaussianBlur(image, (3, 3), 0)
    gray = cv.cvtColor(blurred, cv.COLOR_BGR2GRAY)

    grad_x = cv.Sobel(gray, cv.CV_16SC1, 1, 0)
    grad_y = cv.Sobel(gray, cv.CV_16SC1, 0, 1)

    # edge_output = cv.Canny(grad_x, grad_y, 30, 150)
    edge_output = cv.Canny(gray, 50, 150)
    cv.imshow("canny extraction",edge_output)
    return edge_output


def contours_demo(image):
    binary = edge_demo(image)
    contours, hierarchy= cv.findContours(binary, cv.RETR_EXTERNAL, cv.CHAIN_APPROX_SIMPLE)
    for i, contour in enumerate(contours):
        cv.drawContours(image, contours, i, (0, 0, 255), 2)
        print(i)
    cv.imshow("detect contours", image)

result:
在这里插入图片描述

转载请注明转自:https://leejason.blog.csdn.net/article/details/106448720

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值