图像轮廓

图像轮廓并不是图像边缘。
边缘检测可能是断断续续的点 ,把这些点连起来才是轮廓。
注意问题:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
1. 查找图像轮廓函数
在这里插入图片描述
图像轮廓_第1张图片
mode有四种,只要是检测外轮廓1和检测所有轮廓234 。最常用4 。
图像轮廓_第2张图片
method也有四种,重点关注前两点。
图像轮廓_第3张图片

2. 绘制图像轮廓函数

在这里插入图片描述
图像轮廓_第4张图片
(B G R)三个数值的范围均为0-255
(255,0,0)蓝色 (0,255,0)绿色(0,0,255)红色

可以绘制全部,也可以选定。颜色(G B R)格式,粗度随意。需要注意,绘制轮廓会改变原图像,必须复制一份。且原图片必须二值化才能寻找边缘。

import cv2
o=cv2.imread('image\\contours.bmp')
gray=cv2.cvtColor(o,cv2.COLOR_BGR2GRAY)    #边缘检测处理的是二值图片。故先将BGR转为灰度,再二值化。
ret,binary=cv2.threshold(gray,127,255,cv2.THRESH_BINARY)     #二值阈值化
image,contours,hierarchy=cv2.findContours(binary,
                                          cv2.RETR_TREE,
                                          cv2.CHAIN_APPROX_SIMPLE)
co=o.copy()                              #会改变原图片,所以通常复制一份
co1=o.copy()
r=cv2.drawContours(co,contours,-1,(0,255,0),2)   # -1代表显示所有边缘  颜色(0,255,0) 粗度6
r1=cv2.drawContours(co1,contours,0,(255,0,0),6)   #绘制第0个边缘   颜色(255,0,0) 粗度16
cv2.imshow('original',o)
cv2.imshow('r',r)
cv2.imshow('r1',r1)
cv2.waitKey()
cv2.destroyAllWindows()


图像轮廓_第5张图片

你可能感兴趣的:(python-OpenCV)