1.查找图形轮廓
2.API
3.完整代码
import cv2
import numpy as np
img = cv2.imread("image/reck.png")
#变成单通道
signal_img = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
#变成二值图
#返回值分别是阈值和图像
ret,binary = cv2.threshold(signal_img,150,255,cv2.THRESH_BINARY)
"""轮廓提取"""
#参数:分别为原图,查找轮廓的方式,返回结果的方式
contours,hierarchy = cv2.findContours(binary,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
#contours 是一个list类型,里面存放的才是ndarray类型
#一个ndarray代表了一层轮廓
print(contours)
cv2.waitKey(0)
cv2.destroyAllWindows()
如果findContours的第三个参数选的不是SIMPLE而是NONE,那么contours里面存的是轮廓上所有点的坐标
4.绘制轮廓的API
5.完整代码:
import cv2
import numpy as np
img = cv2.imread("image/reck.png")
#变成单通道
signal_img = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
#变成二值图
#返回值分别是阈值和图像
ret,binary = cv2.threshold(signal_img,150,255,cv2.THRESH_BINARY)
"""轮廓提取"""
#参数:分别为原图,查找轮廓的方式,返回结果的方式
#返回值:轮廓和层级
contours,hierarchy = cv2.findContours(binary,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
#contours 是一个list类型,里面存放的才是ndarray类型
#一个ndarray代表了一层轮廓
print(hierarchy)
"""绘制轮廓"""
#绘制轮廓会改变原图,因此需要imshow 原图
#参数: img是图片,contours是上面的返回值轮廓,-1代表要绘制的轮廓的标号,-1表示绘制所有的轮廓
#轮廓的标号顺序跟上面提取轮廓的method参数有关
#(0,0,255)表示color,2代表thickness,代表线宽
cv2.drawContours(img,contours,-1,(0,0,255),2)
cv2.imshow("show",img)
cv2.waitKey(0)
cv2.destroyAllWindows()