OpenCV中的轮廓发现和轮廓绘制
代码实现:
import cv2
import numpy as np
#轮廓发现和轮廓绘制
img = cv2.imread('cat.jpg')
cv2.imshow('img',img)
img = cv2.medianBlur(img,5)
cv2.imshow('blur',img)
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
ret,binary = cv2.threshold(gray,0,255,cv2.THRESH_BINARY|cv2.THRESH_OTSU)
cv2.imshow('binary img',binary)
#img是一张与binary类似的二值图,contours是list列表结构每个元素包含一个边沿信息,heriachy是一个矩阵,用处作者也未知,可以探讨
contours,heriachy = cv2.findContours(binary,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
#第三个参数是引索,是第几个轮廓,赋值为-1则为所有引索,否则需要配合for循环和enumerate函数使用
#最后一个参数为绘制轮廓的像素宽度,赋值为-1则会自动填充轮廓内部
#drawcontours可以配合各种边缘检测算子使用
cv2.drawContours(img,contours,-1,(255,200,200),2)
cv2.imshow('contour',img)
cv2.waitKey()
运行结果: