Python OpenCV 轮廓检测:编号、层次结构和填充
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
原文地址: https://www.cveoy.top/t/topic/mQhP 著作权归作者所有。请勿转载和采集!