Python OpenCV findContours获取轮廓并切割实例

青禾
青禾
发布时间:2026-10-13| 3人浏览过
原创

本文介绍如何利用Python和OpenCV库中的findContours函数获取图像轮廓。通过解析cv2.RETR_*参数模式、使用boundingRect确定范围并绘制矩形,最后结合数组切片技巧(注意行列与宽高对应关系)实现轮廓区域的精准切割与保存,提供完整代码示例。

1 获取轮廓

在OpenCV2中,提取轮廓的核心函数是cv2.findContours。

import numpy as np
import cv2

im = cv2.imread('test.jpg')
imgray = cv2.cvtColor(im,cv2.COLOR_BGR2GRAY)
ret,thresh = cv2.threshold(imgray,127,255,0)
image, contours, hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)

该函数的第二个参数至关重要,主要包含cv2.RETR_LIST、cv2.RETR_TREE、cv2.RETR_CCOMP以及cv2.RETR_EXTERNAL几种模式,具体含义建议参考官方文档说明。

2 画出轮廓

为了直观展示检测到的轮廓,可以利用cv2.boundingRect()函数获取每个轮廓的边界框,即左上角坐标以及宽度和高度。随后,使用cv2.rectangle()方法在图像上绘制出矩形轮廓。

for i in range(0,len(contours)): 
  x, y, w, h = cv2.boundingRect(contours[i])  
  cv2.rectangle(image, (x,y), (x+w,y+h), (153,153,0), 5) 

3切割轮廓

对轮廓区域的切割主要依赖数组切片操作。这里有一个关键技巧:图像切割时的w和h分别代表宽和高,而NumPy数组切片时对应的是行(row)和列(column)。

因此,在进行图像切割时,数组切片的高度和宽度顺序是相反的(先高后宽)。

  newimage=image[y+2:y+h-2,x+2:x+w-2] # 先用y确定高,再用x确定宽
      nrootdir=("E:/cut_image/")
      if not os.path.isdir(nrootdir):
        os.makedirs(nrootdir)
      cv2.imwrite( nrootdir+str(i)+".jpg",newimage) 
      print (i)

按照上述方法,即可成功切割出所有确定的轮廓区域。

总结

以上就是本文关于Python通过OpenCV的findContours获取轮廓并切割实例的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站:

python+opencv轮廓检测代码解析

OpenCV-Python实现轮廓检测实例分析

如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。