Python图像处理之目标物体轮廓提取的实现方法

 更新时间:2021年08月10日 11:56:45   作者:赵卓不凡  
目标物体的轮廓实质是指一系列像素点构成,这些点构成了一个有序的点集,这篇文章主要给大家介绍了关于Python图像处理之目标物体轮廓提取的实现方法,需要的朋友可以参考下

1 引言

目标物体的边缘对图像识别和计算机分析十分有用。边缘可以勾画出目标物体,使观察者一目了然;边缘蕴含了丰富的内在信息(如方向、形状等),是图像识别中抽取图像特征的重要属性。轮廓提取是边界分割中非常重要的一种处理,同时也是图像处理的经典难题,轮廓提取和轮廓跟踪的目的都是获得图像的外部轮廓特征。

2 原理

二值图像的轮廓提取的原理非常简单,就是掏空内部点:如果原图中有一点为黑,且它的8个相邻点皆为黑色,则将该点删除。对于非二值图像,需要先进行二值化处理。轮廓提取的方法有很多,在这里我们介绍一种最基本、最简单容易实现的算法。算法原理如下:

  • 在进行轮廓提取时,使用一个一维数组,用来记录处理的像素点的周围8邻域的信息
  • 若8个邻域的像素点的灰度值和中心点的灰度值相同,则认为该点在物体的内部,可以删除;
  • 否则,认为该点在图像的边缘,需要保留。
  • 依次处理图像中每一个像素,则最后留下来的就是图像的轮廓。

3 Python实现

1)读入彩色图像

img_name = "./20210808/sample3.png"
img = cv2.imread(img_name)

结果如下:

请添加图片描述

2) 彩色图像灰度化

gray_img = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

结果如下:

请添加图片描述

3)二值化

def get_binary_img(img):
    # gray img to bin image
    bin_img = np.zeros(shape=(img.shape), dtype=np.uint8)
    h = img.shape[0]
    w = img.shape[1]
    for i in range(h):
        for j in range(w):
            bin_img[i][j] = 255 if img[i][j] > 127 else 0
    return bin_img
# 调用
bin_img = get_binary_img(gray_img)

结果如下:

请添加图片描述

4)提取轮廓

参考上述原理,进行实现,代码如下:

def get_contour(bin_img):
    # get contour
    contour_img = np.zeros(shape=(bin_img.shape),dtype=np.uint8)
    contour_img += 255
    h = bin_img.shape[0]
    w = bin_img.shape[1]
    for i in range(1,h-1):
        for j in range(1,w-1):
            if(bin_img[i][j]==0):
                contour_img[i][j] = 0
                sum = 0
                sum += bin_img[i - 1][j + 1]
                sum += bin_img[i][j + 1]
                sum += bin_img[i + 1][j + 1]
                sum += bin_img[i - 1][j]
                sum += bin_img[i + 1][j]
                sum += bin_img[i - 1][j - 1]
                sum += bin_img[i][j - 1]
                sum += bin_img[i + 1][j - 1]
                if sum ==  0:
                    contour_img[i][j] = 255

    return contour_img
# 调用    
contour_img = get_contour(bin_img)

结果如下:

请添加图片描述

4 总结

通过上述简单步骤,我们实现了物体轮廓提取,相应的处理效果如下:

请添加图片描述

上图中 左侧为原图,右侧为我们提取的物体轮廓图。

到此这篇关于Python图像处理之目标物体轮廓提取的文章就介绍到这了,更多相关Python目标物体轮廓提取内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python插入Elasticsearch操作方法解析

    Python插入Elasticsearch操作方法解析

    这篇文章主要介绍了Python插入Elasticsearch操作方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • 使用 Python 实现简单的 switch/case 语句的方法

    使用 Python 实现简单的 switch/case 语句的方法

    这篇文章主要介绍了用 Python 实现简单的 switch/case 语句的方法,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-09-09
  • Python安装与卸载流程详细步骤(图解)

    Python安装与卸载流程详细步骤(图解)

    这篇文章主要介绍了Python环境的安装与卸载流程,本文分步骤通过图文并茂的形式给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-02-02
  • Python+OpenCV实现单个圆形孔和针检测

    Python+OpenCV实现单个圆形孔和针检测

    这篇文章主要为大家详细介绍了如何通过Python+OpenCV实现单个圆形孔和针检测功能,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下
    2022-10-10
  • pandas库中to_datetime()方法的使用解析

    pandas库中to_datetime()方法的使用解析

    这篇文章主要介绍了pandas库中to_datetime()方法的使用解析,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • python中lxml库之etree使用步骤详解

    python中lxml库之etree使用步骤详解

    这篇文章主要介绍了python中lxml库之etree使用的相关资料,lxml库中的etree模块提供了一个简单而灵活的API来解析和操作XML/HTML文档,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-03-03
  • Python利用BeautifulSoup解析Html的方法示例

    Python利用BeautifulSoup解析Html的方法示例

    BeautifulSoup是python的一个库,最主要的功能是从网页抓取数据。下面这篇文章主要给大家介绍了关于Python利用BeautifulSoup解析Html的方法示例,文中通过示例代码介绍的非常详细,需要的朋友们下面跟着小编来一起学习学习吧。
    2017-07-07
  • Python+Django+MySQL实现基于Web版的增删改查的示例代码

    Python+Django+MySQL实现基于Web版的增删改查的示例代码

    这篇文章主要介绍了Python+Django+MySQL实现基于Web版的增删改查的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-05-05
  • python opencv 检测移动物体并截图保存实例

    python opencv 检测移动物体并截图保存实例

    这篇文章主要介绍了python opencv 检测移动物体并截图保存实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-03-03
  • python 如何去除字符串中指定字符

    python 如何去除字符串中指定字符

    python中的strip()可以去除头尾指定字符,只能删除头尾指定字符,想要去除中间字符,可以使用replace()函数,本文结合示例代码给大家介绍的非常详细,需要的朋友参考下吧
    2022-12-12

最新评论