一 图像轮廓
具有相同颜色或强度的连续点的曲线。
图像轮廓的作用
可以用于图像分析
物体的识别与检测
注意
为了检测的准确性,需要先对图像进行二值化或Canny操作。
画轮廓时会修改输入的图像。
轮廓查找的API
findContours(img,mode,ApproximationMode,...)
两个返回值,contours和hierarchy
mode
RETR_EXTERNAL=0,表示只检测外轮廓。
RETR_LIST=1,检测的轮廓不建立等级关系
RETR_CCOMP=2,每层最多两级
RETR_TREE=3,桉树形存储轮廓
ApproximationMode
CHAIN_APPROX_NONE,保存所有轮廓上的点
CHAIN_APPROX_SIMPLE,只保存角点
import cv2
import numpy as np
img=cv2.imread('./9615.jpg')
print(img.shape)
#转变成单通道
gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
print(gray.shape)
#二值化
ret,binary=cv2.threshold(gray,150,255,cv2.THRESH_BINARY)
#轮廓查找
contours,hierarchy=cv2.findContours(binary,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
print(contours)
cv2.imshow('img',img)
cv2.waitKey(0)
二 绘制轮廓
如何绘制轮廓
drawContours(img,contours,contourIdx,color,thickness...)
contourIdx,-1表示绘制所有轮廓
color,颜色(0,0,255)
thickness,线宽,-1是全部填充
import cv2
import numpy as np
img=cv2.imread('./9615.jpg')
print(img.shape)
#转变成单通道
gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
print(gray.shape)
#二值化
ret,binary=cv2.threshold(gray,150,255,cv2.THRESH_BINARY)
#轮廓查找
contours,hierarchy=cv2.findContours(binary,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
print(contours)
#绘制轮廓
img1=cv2.drawContours(img,contours,0,(0,0,255),5)
#cv2.imshow('img',img)
cv2.imshow('img1',img1)
cv2.waitKey(0)
三 轮廓的面积和周长
1 轮廓的面积
conto