亲宝软件园·资讯

展开

OpenCV 边缘提取轮廓 Python OpenCV 基于图像边缘提取的轮廓发现函数

梦想橡皮擦 人气:0
想了解Python OpenCV 基于图像边缘提取的轮廓发现函数的相关内容吗,梦想橡皮擦在本文为您仔细讲解OpenCV 边缘提取轮廓 的相关知识和一些Code实例,欢迎阅读和指正,我们先划重点:OpenCV,边缘提取轮廓,OpenCV,提取轮廓,下面大家一起来学习吧。

基础知识铺垫

在图像中,轮廓可以简单的理解为连接具有相同颜色的所有连续点(边界)的曲线,轮廓可用于形状分析和对象检测、识别等领域。

轮廓发现的原理:先通过阈值分割提取目标物体,再通过边缘检测提取目标物体轮廓。
一个轮廓就是一系列的点(像素),这些点构成了一个有序的点集合。

使用 cv2.findContours 函数可以用来检测图像的边缘。

函数原型说明

contours, hierarchy = cv2.findContours(image, mode, method[, contours[, hierarchy[, offset]]])

我使用的 Python OpenCV 是 4.0 以上版本,如果你使用的是 3.0 以上,可能存在返回值差异问题。
参数说明如下:

备注:image 参数需要是二值图,而不是灰度图,返回结果是等高线和层次结构。

轮廓检索模式,有四种

轮廓逼近方法

了解上述内容之后,就可以应用轮廓发现函数了,代码如下:

import cv2 as cv

src = cv.imread("./both.jpeg")

gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY)
ret, thresh = cv.threshold(gray, 150, 255, 0)
cv.imshow("thresh",thresh)
# 寻找轮廓
contours, hierarchy = cv.findContours(thresh, cv.RETR_TREE, cv.CHAIN_APPROX_SIMPLE)

轮廓发现之后,还要通过 cv2.drawContours 函数绘制轮廓,该函数原型如下:

image = cv2.drawContours(image, contours, contourIdx, color[, thickness[, lineType[, hierarchy[, maxLevel[, offset]]]]])

参数说明如下:

测试代码与运行结果如下:

import cv2 as cv
# help(cv.drawContours)
src = cv.imread("./both.jpeg")

gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY)
ret, thresh = cv.threshold(gray, 150, 255, 0)
cv.imshow("thresh",thresh)
# 寻找轮廓
contours, hierarchy = cv.findContours(thresh, cv.RETR_TREE, cv.CHAIN_APPROX_SIMPLE)

# print(contours)
# print(hierarchy)
# 绘制轮廓
cv.drawContours(src,contours,-1,(200,0,150),2)

cv.imshow('src',src)
cv.waitKey(0)

加载全部内容

相关教程
猜你喜欢
用户评论