程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

OpenCV-Python快速入門(十):繪圖基礎

編輯:Python

OpenCV-Python快速入門(十):繪圖基礎

    • 前言
    • 前提條件
    • 實驗環境
    • 繪圖基礎
      • 繪制直線
      • 繪制矩形
      • 繪制圓形
      • 繪制橢圓
      • 繪制多邊形
      • 繪制文字
    • 參考文獻

前言

  • 本文是個人快速入門OpenCV-Python的電子筆記,由於水平有限,難免出現錯漏,敬請批評改正。
  • 繪制矩形

    import cv2
    import numpy as np
    ''' img = cv2.rectangle( img, pt1, pt2, color[, thickness[, lineType]] ) 參數說明: img:在其上面繪制圖形的載體圖像(繪圖的容器載體,也稱為畫布、畫板)。 pt1 為矩形頂點。 pt2 為矩形中與 pt1 對角的頂點。 color:繪制形狀的顏色。通常使用 BGR 模型表示顏色, 例如,(0, 255, 0)表示綠色。對於灰度圖像,只能傳入灰度值。 需要注意,顏色通道的順序是 BGR,而不是 RGB。 thickness:線條的粗細。 默認值是 1,如果設置為-1,表示填充圖形(即繪制的圖形是實心的)。 lineType:線條的類型,默認是 8 連接類型。 '''
    img = np.zeros((400,400,3), np.uint8)
    img = cv2.rectangle(img,(100,100),(300,300),(0,0,255),-1)
    cv2.namedWindow('cv2.rectangle')
    cv2.imshow('cv2.rectangle', img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    

    繪制圓形

    import cv2
    import numpy as np
    ''' img = cv2.circle( img, center, radius, color[, thickness[, lineType]] ) 參數說明: img:在其上面繪制圖形的載體圖像(繪圖的容器載體,也稱為畫布、畫板)。 center 為圓心。 radius 為半徑。 color:繪制形狀的顏色。通常使用 BGR 模型表示顏色, 例如,(0, 255, 0)表示綠色。對於灰度圖像,只能傳入灰度值。 需要注意,顏色通道的順序是 BGR,而不是 RGB。 thickness:線條的粗細。 默認值是 1,如果設置為-1,表示填充圖形(即繪制的圖形是實心的)。 lineType:線條的類型,默認是 8 連接類型。 '''
    img = np.zeros((400,400,3),dtype="uint8")
    (centerX,centerY) = (round(img.shape[1] / 2),round(img.shape[0] / 2))
    # 將圖像的中心作為圓心,實際值為 400/2
    for r in range(5,round(400/2),12):
    cv2.circle(img,(centerX,centerY),r,(255,255,255),3)
    # circle(載體圖像,圓心,半徑,顏色)
    cv2.imshow("cv2.circle",img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    

    繪制橢圓

    import cv2
    import numpy as np
    ''' img=cv2.ellipse(img, center, axes, angle, startAngle, endAngle, color[,thickness[, lineType]]) 參數說明: img:在其上面繪制圖形的載體圖像(繪圖的容器載體,也稱為畫布、畫板)。 center 為橢圓的圓心坐標。 axes 為軸的長度。 angle 為偏轉的角度。 startAngle 為圓弧起始角的角度。 endAngle 為圓弧終結角的角度。 color:繪制形狀的顏色。通常使用 BGR 模型表示顏色, 例如,(0, 255, 0)表示綠色。對於灰度圖像,只能傳入灰度值。 需要注意,顏色通道的順序是 BGR,而不是 RGB。 thickness:線條的粗細。 默認值是 1,如果設置為-1,表示填充圖形(即繪制的圖形是實心的)。 lineType:線條的類型,默認是 8 連接類型。 '''
    img = np.zeros((400,400,3),dtype="uint8")
    center=(round(400/2),round(400/2))
    size=(100,200)
    # 軸的長度
    for i in range(0,5):
    # 偏移角度
    angle = np.random.randint(0,361)
    # 生成隨機顏色,3 個[0,256)的隨機數
    color = np.random.randint(0,high = 256,size = (3,)).tolist()
    # 隨機粗細
    thickness = np.random.randint(1,9)
    cv2.ellipse(img, center, size, angle, 0, 360, color,thickness)
    cv2.imshow("cv2.ellipse",img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    

    繪制多邊形

    import cv2
    import numpy as np
    ''' img = cv2.polylines( img, pts, isClosed, color[, thickness[, lineType[, shift]]]) 參數說明: img:在其上面繪制圖形的載體圖像(繪圖的容器載體,也稱為畫布、畫板)。 pts 為多邊形的各個頂點。 isClosed 為閉合標記,用來指示多邊形是否是封閉的。 若該值為 True,則將最後一個點與第一個點連接,讓多邊形閉合; 否則,僅僅將各個點依次連接起來,構成一條曲線。 color:繪制形狀的顏色。通常使用 BGR 模型表示顏色, 例如,(0, 255, 0)表示綠色。對於灰度圖像,只能傳入灰度值。 需要注意,顏色通道的順序是 BGR,而不是 RGB。 thickness:線條的粗細。 默認值是 1,如果設置為-1,表示填充圖形(即繪制的圖形是實心的)。 lineType:線條的類型,默認是 8 連接類型。 注:需要給出每個頂點的坐標。這些點的坐標構建了 一個大小等於“頂點個數*1*2”的數組, 這個數組的數據類型必須為 numpy.int32。 '''
    img = np.zeros((400,400,3),dtype="uint8")
    # 生成各個頂點,注意數據類型為 int32
    pts=np.array([[200,50],[300,200],[200,350],[100,200]], np.int32)
    # 第 1 個參數為-1, 表明它未設置具體值,它所表示的維度值是通過其他參數值計算得到的
    pts=pts.reshape((-1,1,2))
    # # 調用函數 cv2.polylines()完成多邊形繪圖。注意,第 3 個參數控制多邊形是否封閉
    cv2.polylines(img,[pts],True,(255,255,255),8)
    cv2.imshow("cv2.polylines",img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    

    繪制文字

    import cv2
    import numpy as np
    from PIL import Image, ImageDraw, ImageFont
    ''' img=cv2.putText(img, text, org, fontFace, fontScale, color[, thickness[,lineType[, bottomLeftOrigin]]]) 參數說明: img:在其上面繪制圖形的載體圖像(繪圖的容器載體,也稱為畫布、畫板)。 text 為要繪制的字體。 org 為繪制字體的位置,以文字的左下角為起點。 fontFace 表示字體類型,其參數類型及含義。 fontScale 表示字體大小。 color:繪制形狀的顏色。通常使用 BGR 模型表示顏色, 例如,(0, 255, 0)表示綠色。對於灰度圖像,只能傳入灰度值。 需要注意,顏色通道的順序是 BGR,而不是 RGB。 thickness:線條的粗細。 默認值是 1,如果設置為-1,表示填充圖形(即繪制的圖形是實心的)。 lineType:線條的類型,默認是 8 連接類型。 bottomLeftOrigin 用於控制文字的方向。 默認值為 False,當設置為 True 時,文字是垂直鏡像的效果。 '''
    img = np.zeros((400,400,3),dtype="uint8")
    cv2.putText(img,'OpenCV',(20,150), cv2.FONT_HERSHEY_SIMPLEX, 3,(0,255,0),15)
    cv2.putText(img,'OpenCV',(20,150), cv2.FONT_HERSHEY_SIMPLEX, 3,(0,0,255),5)
    # 繪制中文
    # 創建一個可以在給定圖像上繪圖的對象
    img_np= Image.fromarray(img)
    draw = ImageDraw.Draw(img_np)
    # 字體的格式
    fontStyle = ImageFont.truetype("simsun.ttc", size=64 ,encoding="utf-8")
    # 繪制文本
    draw.text((10, 250),"數字圖像處理",(0, 255, 0),font=fontStyle)
    img = np.array(img_np)
    cv2.imshow("cv2.putText",img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    

    參考文獻

    [1] https://opencv.org/
    [2] 李立宗. OpenCV輕松入門:面向Python. 北京: 電子工業出版社,2019

    • 更多精彩內容,可點擊進入
      OpenCV-Python快速入門專欄或我的個人主頁查看

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved