图像轮廓

1.0 基本概念

轮廓可以简单认为成将连续的点(连着边界)连在一起的曲线,具有相同的颜色或者灰度。轮廓在形状分析和物体的检测和识别中很有用。
• 为了更加准确,要使用二值化图像。在寻找轮廓之前,要进行阈值化处理
或者 Canny 边界检测。
• 查找轮廓的函数会修改原始图像。如果你在找到轮廓之后还想使用原始图
像的话,你应该将原始图像存储到其他变量中。
• 在 OpenCV 中,查找轮廓就像在黑色背景中超白色物体。你应该记住,要找的物体应该是白色而背景应该是黑色。

1.1 查找轮廓、绘制轮廓

让我们看看如何在一个二值图像中查找轮廓:函数 cv2.findContours() 有三个参数,第一个是输入图像,第二个是轮廓检索模式,第三个是轮廓近似方法。返回值有三个,第一个是图像,第二个是轮廓,第三个是(轮廓的)层析结构。轮廓(第二个返回值)是一个 Python列表,其中存储这图像中的所有轮廓。每一个轮廓都是一个 Numpy 数组,包含对象边界点(x,y)的坐标。

函数 cv2.drawContours() 可以被用来绘制轮廓。它可以根据你提供的边界点绘制任何形状。它的第一个参数是原始图像,第二个参数是轮廓,一个 Python 列表。第三个参数是轮廓的索引(在绘制独立轮廓是很有用,当设置为 -1 时绘制所有轮廓)。接下来的参数是轮廓的颜色和厚度等

image,contours, hierarchy = cv2.findContours(image,mode,method)
    image:修改后的图像            image:原始图像
    contours:得到的轮廓           mode:轮廓检索模式
    hierarchy:图像拓扑信息        method:轮廓近似方法
r=cv2.drawContours(o,contours,contourIdx,color,[,thickness])
    r:目标图像                    o:原始图像
    contours:需要绘制的边缘数组
    contourIdx:需要绘制的边缘索引,若全部绘制-1
    color:绘制的颜色(BGR)
    thickness:可选,绘制密度,画笔粗细
import cv2
import numpy as np
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()
r=cv2.drawContours(co,contours,2,(0,0,255),6)  
cv2.imshow("original",o)
cv2.imshow("contours",r)
cv2.waitKey()
cv2.destroyAllWindows()

图像轮廓_第1张图片

你可能感兴趣的:(opencv)