Python OpenCV findContours获取轮廓并切割实例
本文介绍如何利用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实现轮廓检测实例分析
如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













