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

    輪廓點集的繪制

    概要

    教你如何繪制輪廓點集.

    keywords drawContours 輪廓 繪制

    輪廓點集的繪制(drawContours)

    # 繪制輪廓
    cv2.drawContours(image=canvas, contours=contours, contourIdx=-1, color=(0,255,0), thickness=3)
    

    參數解析

    • image :畫布

    • contours 輪廓數組

    • contourIdx : 要繪制的輪廓序號 -1代表所有

    • color 顏色

    • thickness 線條寬度

    學習編程, 最重要的是閱讀源代碼, 并且修改參數, 并實驗. 輸入(Input)決定輸出(Output), 所以同學們, 接下來的三個程序, 好好閱讀源碼

    draw_contours_v0.py

    src/draw_contours_v0.py

    import numpy as np
    import cv2
    
    gray = cv2.imread('cute_princess.png', cv2.IMREAD_GRAYSCALE)
    
    # 設定模式
    mode = cv2.RETR_TREE
    # 獲取邊緣信息
    image, contours, hierarchy = cv2.findContours(image=gray,mode=mode, method=cv2.CHAIN_APPROX_SIMPLE)
    
    # 創建畫布
    canvas = cv2.cvtColor(gray, cv2.COLOR_GRAY2BGR)
    # 繪制輪廓
    cv2.drawContours(image=canvas, contours=contours, contourIdx=-1, color=(0,255,0), thickness=3)
    
    # 保存畫布
    cv2.imwrite('countours_part_all_mode_%d.png'%(mode), canvas)
    # 打印繼承矩陣
    print(hierarchy)
    

    draw_contours_v1.py

    注意:drawContours函數會直接在傳入的畫布上繪制, 返回的也是這個畫布.

    如果你不想影響原來的圖片,可以傳入一個圖片的拷貝 np.copy(img)

    all_cnt_img = cv2.drawContours(np.copy(img), contours, -1, (0,255,0), 3)
    

    src/draw_contours_v1.py

    import numpy as np
    import cv2
    
    img = cv2.imread('cute_princess.png')
    # 讀入灰度圖
    gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
    # 轉化為二值化圖
    ret,thresh = cv2.threshold(gray,127,255,0)
    # 獲取邊緣信息
    image, contours, hierarchy = cv2.findContours(image=thresh,mode=cv2.RETR_TREE, method=cv2.CHAIN_APPROX_SIMPLE)
    
    
    all_cnt_img = cv2.drawContours(np.copy(img), contours, -1, (0,255,0), 3)
    
    cv2.imwrite('countours_part_all.png', all_cnt_img)
    

    draw_contours_v2.py

    接下來的這個代碼, 分別繪制每個輪廓并保存在不同的圖片中. 教程里上部分的圖片就是由這個程序生成的.

    src/draw_contours_v2.py

    import numpy as np
    import cv2
    
    img = cv2.imread('cute_princess.png')
    # 讀入灰度圖
    gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
    # 轉化為二值化圖
    ret,thresh = cv2.threshold(gray,127,255,0)
    # 獲取邊緣信息
    image, contours, hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
    
    for idx,cnt in enumerate(contours):
        tmp = cv2.drawContours(np.copy(img), [cnt], 0, (0,255,0), 3)
        print("Contour No.%d"%(idx))
        print(cnt)
        cv2.imwrite('contours_part_%d.png'%(idx), tmp)
    


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