编程语言
首页 > 编程语言> > 【Opencv3+Python3入门(17)图像轮廓发现】

【Opencv3+Python3入门(17)图像轮廓发现】

作者:互联网

Opencv中有两个主要用于轮廓发现的API:findContours发现轮廓,drawContours绘制轮廓。

轮廓发现的原理:是基于图像的边缘提取的基础上,寻找对象的轮廓的方法。因此边缘提取的阈值大小会影响到轮廓最终的结果好坏。

#17,轮廓发现
import cv2 as cv
import numpy as np

def image_Contours(image):
    #防止随机噪声影响效果,首先对原图高斯滤波
    dst=cv.GaussianBlur(image,(3,3),0)
    #将原图像转换为灰度图像
    gray=cv.cvtColor(dst,cv.COLOR_BGR2GRAY)
    #图像利用阈值化进行二值化
    ret,binary=cv.threshold(gray,0,255,cv.THRESH_BINARY | cv.THRESH_TRIANGLE)
    cv.imshow("Binary_image",binary)
    #在二值化图像的基础上进行寻找轮廓
    cloneImage,contours,heriachy=cv.findContours(binary,cv.RETR_TREE,cv.CHAIN_APPROX_SIMPLE)
    #循环打印出所有的轮廓
    for i ,contour in enumerate(contours):
        #将最后一个参数修改为-1即为填充。
        cv.drawContours(image,contours,i,(255,0,255),2)
    #显示图像
    cv.imshow("Contours_demo",image)
src = cv.imread(r'F:\OutputResult\SrcImage\coins1.jpg')
cv.namedWindow("src",0)
cv.imshow("src",src)
image_Contours(src)
cv.waitKey(0)
cv.destroyAllWindows()

函数说明:

cv.findContours(image, mode, method[, contours[, hierarchy[, offset]]]) 返回值有三个:image, contours, hierarchy

参数image:image图像源,8位单通道图像。非零像素被视为1。零像素保持0,因此图像被为二值图像。可以使用比较、范围内、阈值,

自适应阈值、canny和其他方法从灰度或彩色图像中创建二进制图像。

参数mode:模式轮廓检索模式。

参数method:轮廓近似法,参见轮廓近似模式。

参数contours:轮廓检测到轮廓。每个轮廓都存储为点的矢量。

参数hierarchy:层次可选输出向量。包含有关图像拓扑的信息。

参数offset:偏移每个轮廓点移动的可选偏移量。如果从图像ROI中提取轮廓,然后在整个图像中进行分析。

运行结果:

如下例:图像背景灰度值纯白色,最后轮廓检测后填充效果不是很好。

标签:src,17,image,Opencv3,contours,图像,轮廓,cv,Python3
来源: https://blog.csdn.net/KID_yuan/article/details/89575329