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

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

本文介绍如何利用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 相关产品和应用

全部下载

专题列表