import cv2

读取图片

img = cv2.imread('test.jpg')

转为灰度图

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

二值化

ret, binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)

查找轮廓

contours, hierarchy = cv2.findContours(binary, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

显示轮廓数量

print('轮廓数量:', len(contours))

显示图片的编号

for i in range(len(contours)): cv2.drawContours(img, contours, i, (0, 0, 255), 2) cv2.putText(img, str(i), tuple(contours[i][0][0]), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 0, 0), 2)

显示图片

cv2.imshow('img', img)

解释返回值hierarchy的具体含义

hierarchy是一个四维数组,其中每一行对应一个轮廓,包含四个元素,分别是

[next, previous, child, parent]

next: 同层下一个轮廓的索引,如果没有则为-1

previous: 同层上一个轮廓的索引,如果没有则为-1

child: 第一个子轮廓的索引,如果没有则为-1

parent: 父轮廓的索引,如果没有则为-1

对第1个轮廓用127灰色进行填充

cv2.drawContours(img, contours, 0, (127, 127, 127), -1)

等待按下任意按键退出

cv2.waitKey(0) cv2.destroyAllWindows()

显示图片的编号分别是0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99

Python OpenCV 轮廓检测:编号、层次结构和填充

原文地址: https://www.cveoy.top/t/topic/mQhP 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录