<button id="ssm6u"><optgroup id="ssm6u"></optgroup></button>
  • 跳轉至

    連通域的輪廓點集

    概要

    以小公主的圖片為例子,給你講解contour輪廓的含義

    keywords contours 輪廓 點集

    連通域的輪廓點集(contours)

    首先讀入灰度圖.

    import numpy as np
    import cv2
    gray = cv2.imread('cute_princess.png', cv2.IMREAD_GRAYSCALE)
    

    cute_princess.png

    這幅畫是阿凱手繪的, 取名為可愛的小公主.

    接下來呢, 我們利用cv2.findContours 來尋找二值化圖像的輪廓.

    如果不是二值化圖片而是灰度圖的話, opencv會這樣處理:

    • 0 如果灰度圖該點像素點為0

    • 1 如果是除零以外的其他值

    # 獲取邊緣信息
    image, contours, hierarchy = cv2.findContours(image=gray,mode=cv2.RETR_TREE, method=cv2.CHAIN_APPROX_SIMPLE)
    

    1.參數解析

    • image 傳入的圖片

    • mode 模式選擇,檢測外輪廓還是內輪廓,是否包含繼承(包含)關系等.

    關于模式的問題,比較復雜下文還會細講.

    • cv2.RETR_EXTERNAL 只檢測外輪廓。忽略輪廓內部的洞。

    • cv2.RETR_LIST : 檢測所有的輪廓但不建立繼承(包含)關系.

    • cv2.RETR_TREE 檢測所有輪廓,并且建立所有的繼承(包含)關系。

    • cv2.RETR_CCOMP 檢測所有輪廓,但是僅僅建立兩層包含關系。

    • method 邊緣記錄方法

    • cv2.CHAIN_APPROX_NONE 記錄邊緣所有的點.

    • cv2.CHAIN_APPROX_SIMPLE 僅記錄必要的點, 去除所有冗余點. 可以降低內存消耗.

    下面這個圖是官網的例子.

    左邊是采用CHAIN_APPROX_NONE 方法檢測到的輪廓點集, 一共734個點.

    右邊是采用CHAIN_APPROX_SIMPLE 方法檢測到的輪廓點集, 一共4個點.

    ?

    find_contours_method.jpg

    2 返回參數

    image, contours, hierarchy 
    

    2.1 image 灰度圖的二值化圖像

    如果傳入的就是二值化的圖像則二者值相同.

    find_contours_return.png

    2.2 contours 輪廓點集數組

    注意: 該contours樣例講解

    是在 mode=cv2.RETR_TREEmethod=cv2.CHAIN_APPROX_SIMPLE 條件下獲取的.

    countours_part_all.png

    [cnt0, cnt1, ...., cntn]
    

    contour樣例

    二號點集(cnt2)是一個矩形比較簡單, 所以我們可以打印出來看一下.

    print(contours[2])
    
    [[[330 283]]
    
     [[330 327]]
    
     [[526 327]]
    
     [[526 283]]]
    

    contours_part_2.png


    韩国精品无码一区二区三区,精品无码一区二区三区AV,欧洲丰满美熟女乱又伦AV,亚洲午夜久久久影院伊人