Python-OpenCV 图像处理(二十):轮廓检测

import cv2
import numpy as np
from matplotlib import pyplot as plt

__author__ = "zxsuperstar"
__email__ = "[email protected]"

"""
Opencv3 cv2.findContours 轮廓检测
第一个参数是寻找轮廓的图像;

第二个参数表示轮廓的检索模式,有四种: 
cv2.RETR_EXTERNAL表示只检测外轮廓 
cv2.RETR_LIST检测的轮廓不建立等级关系 
cv2.RETR_CCOMP建立两个等级的轮廓,上面的一层为外边界,里面的一层为内孔的边界信息。
    如果内孔内还有一个连通物体,这个物体的边界也在顶层。 
cv2.RETR_TREE建立一个等级树结构的轮廓。

第三个参数method为轮廓的近似办法 
cv2.CHAIN_APPROX_NONE存储所有的轮廓点,相邻的两个点的像素位置差不超过1,
    即max(abs(x1-x2),abs(y2-y1))==1 
cv2.CHAIN_APPROX_SIMPLE压缩水平方向,垂直方向,对角线方向的元素,
    只保留该方向的终点坐标,例如一个矩形轮廓只需4个点来保存轮廓信息 
cv2.CHAIN_APPROX_TC89_L1,CV_CHAIN_APPROX_TC89_KCOS使用teh-Chinl chain 近似算法

cv2.findContours()函数返回三个值,一个是轮廓本身,还有一个是每条轮廓对应的属性。
"""


def contours_demo(image):
    dst = cv2.GaussianBlur(image,(3,3),0)
    gray = cv2.cvtColor(dst,cv2.COLOR_BGRA2GRAY)
    ret, binary = cv2.threshold(gray,0,255,cv2.THRESH_BINARY | cv2.THRESH_OTSU)
    cv2.imshow("binary",binary)

    #cloneimage 显示图像和binary原图一样
    cloneimage,contours,heriachy = cv2.findContours(binary,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)
    cv2.imshow("cloneimage", cloneimage)
    for i,contour in enumerate(contours):
        #函数cv2.drawContours()被用来绘制轮廓。
        # 第一个参数是一张图片,可以是原图或者其他。
        # 第二个参数是轮廓,也可以说是cv2.findContours()找出来的点集,一个列表。
        # 第三个参数是对轮廓(第二个参数)的索引,当需要绘制独立轮廓时很有用,若要全部绘制可设为-1。
        # 接下来的参数是轮廓的颜色和厚度。
        print(i)
        cv2.drawContours(image,contours,i,(0,0,255),2)
    cv2.imshow("detect contours",image)


if __name__ == "__main__":
    src = cv2.imread("fp2.jpg") #blue green red
    # cv2.namedWindow("image", cv2.WINDOW_AUTOSIZE)
    # cv2.namedWindow('image', cv2.WINDOW_NORMAL)
    # cv2.imshow("image",image)
    img = cv2.resize(src, (0, 0), fx=0.25, fy=0.25, interpolation=cv2.INTER_NEAREST)
    h,w,_ = img.shape
    print(img.shape)
    image = img[20:h - 20, 20:w - 20]
    print(image.shape)
    cv2.imshow("image",image)
    contours_demo(image)

    cv2.waitKey(0)
    cv2.destroyAllWindows()


运行结果:

猜你喜欢

转载自blog.csdn.net/zx_good_night/article/details/88715834
今日推荐