日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

OpenCV与图像处理学习三——线段、矩形、圆、椭圆、多边形的绘制以及文字的添加

發布時間:2024/7/23 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OpenCV与图像处理学习三——线段、矩形、圆、椭圆、多边形的绘制以及文字的添加 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

OpenCV與圖像處理學習三——線段、矩形、圓、橢圓、多邊形的繪制以及文字的添加

  • 一、OpenCV中的繪圖函數
    • 1.1 線段繪制
    • 1.2 矩形繪制
    • 1.3 圓繪制
    • 1.4 橢圓的繪制
    • 1.5 多邊形繪制
    • 1.6 添加文字

上兩次筆記主要知識點回顧:

  • 數字圖像基本概念
  • 圖像的讀取、顯示與保存
  • 圖像直方圖的繪制
  • 圖像通道以及通道的分離與合并
  • 顏色空間及其互相轉換

以上是圖像與OpenCV的基礎知識。

###############################################################################
####################################分割線######################################
###############################################################################

這次筆記以及后兩次筆記將聚焦于圖像的基本操作,包括:

  • OpenCV中的繪圖函數
  • 圖像幾何變換
  • 圖像的濾波與增強
  • 圖像形態學的知識
  • 再次給出OpenCV官方給出的python版文檔:https://docs.opencv.org/4.1.2/d6/d00/tutorial_py_root.html

    這次筆記所用到的部分文檔為:https://docs.opencv.org/4.1.2/dc/da5/tutorial_py_drawing_functions.html

    一、OpenCV中的繪圖函數

    1.1 線段繪制

    函數:

    img = cv2.line( img, pt1, pt2, color[, thickness[, lineType[, shift]]] )

    參數:

  • img:待繪制的圖像,也稱為畫板或背景圖。
  • pt1:線段起點的坐標。
  • pt2:線段終點的坐標。
  • color:線段的顏色,以元組的形式,如(255,0,0)。
  • thickness:線條的粗細,默認為1,若為-1則會進行填充(閉合圖形)。
  • lineType:線條類型,有 8型cv2.LINE_AA型,默認為8型,cv2.LINE_AA型因為可以抗鋸齒所以更適合畫曲線。
  • 看一下例子:

    import numpy as np import cv2# 創建一張黑色的背景圖 img=np.zeros((512,512,3), np.uint8) cv2.imshow("black", img) cv2.waitKey(0) cv2.destroyWindow("black") # 繪制一條線寬為5的線段,起點為(0,0),終點為(200,500),顏色為紅色 cv2.line(img,(0,0),(200,500),(0,0,255),5)winname = 'example' cv2.namedWindow(winname) cv2.imshow(winname, img) cv2.waitKey(0) cv2.destroyWindow(winname)

    輸出結果為:

    注意:OpenCV中默認的色彩空間為BGR,所以color參數為(0,0,255)表示的是紅色。

    1.2 矩形繪制

    函數:

    img = cv2.rectangle( img, pt1, pt2, color[, thickness[, lineType[, shift]]] )

    參數:

  • pt1:矩形的左上角。
  • pt2:矩形的右下角。
  • 其余同上條。
  • 看個例子:

    import numpy as np import cv2# 創建一張黑色的背景圖 img=np.zeros((512, 512, 3), np.uint8)# 畫一個黃色邊框的矩形,參數2:左上角坐標,參數3:右下角坐標 cv2.rectangle(img, (384, 0), (510, 128), (0, 255, 255), 1)winname = 'example' cv2.namedWindow(winname) cv2.imshow(winname, img) cv2.waitKey(0) cv2.destroyWindow(winname)

    結果如下所示:

    因為矩形是一個閉合的形狀,所以我們將 thickness 參數改成 -1,看一下效果:

    cv2.rectangle(img, (384, 0), (510, 128), (0, 255, 255), -1)


    它進行了填充操作,即繪制了一個實心的矩形。

    1.3 圓繪制

    函數:

    img = cv2.circle( img, center, radius, color[, thickness[, lineType[, shift]]] )

    參數:

  • center:圓心位置。
  • radius:半徑大小。
  • 其他同上。
  • 看個例子:

    import numpy as np import cv2# 創建一張黑色的背景圖 img=np.zeros((512, 512, 3), np.uint8)# 畫一個填充紅色的圓,參數2:圓心坐標,參數3:半徑 cv2.circle(img, (447, 63), 63, (0, 0, 255), -1)winname = 'example' cv2.namedWindow(winname) cv2.imshow(winname, img) cv2.waitKey(0) cv2.destroyWindow(winname)

    結果如下圖所示:

    1.4 橢圓的繪制

    函數:

    img = cv2.ellipse( img, center, axes, angle, startAngle, endAngle, color[, thickness[, lineType[, shift]]] )

    參數:

  • center:橢圓的中心。
  • axes:x軸和y軸的大小,即半長、短軸的大小,如(100, 50),即半長軸(x軸方向)為100,半短軸(y軸方向)為50。
  • angle:旋轉角度。
  • startAngle:繪制的起始角度。
  • endAngle:繪制的結束角度。
  • 其他同上。
  • 看個例子:

    import numpy as np import cv2# 創建一張黑色的背景圖 img = np.zeros((512, 512, 3), np.uint8)# 在圖中心畫一個填充的半圓 cv2.ellipse(img, (256, 256), (100, 50), 0, 30, 180, (255, 0, 0), -1)winname = 'example' cv2.namedWindow(winname) cv2.imshow(winname, img) cv2.waitKey(0) cv2.destroyWindow(winname)

    結果如下所示:

    從這個結果也可以進一步知道,起始和結束角度都是按照順時針方向來算的。

    1.5 多邊形繪制

    函數:

    img = cv2.polylines( img, pts, isClosed, color[, thickness[, lineType[, shift]]] )

    參數:

  • pts:表示多邊形的點對,具體看下面的例子。
  • isClosed:布爾型,True表示的是線段閉合,False表示不閉合,即起點和終點的那條線段不鏈接。
  • 其他同上。
  • 看個例子:

    import numpy as np import cv2# 創建一張黑色的背景圖 img = np.zeros((512, 512, 3), np.uint8)# 定義四個頂點坐標 pts = np.array([[10, 5], [50, 10], [70, 20], [20, 30]]) print(pts) print(pts.shape) # 頂點個數:4,矩陣變成4*1*2維 pts = pts.reshape((-1, 1, 2)) print(pts) # 繪制橢圓 cv2.polylines(img, [pts], False, (0, 255, 255)) winname = 'example' cv2.namedWindow(winname) cv2.imshow(winname, img) cv2.waitKey(0) cv2.destroyWindow(winname)

    這里需要將多邊形的點對統一為(-1, 1, 2)這種維度的形式,這里的-1是與點的個數相適應的,后面的1和2是表示每個點是有兩個坐標(x和y),然后再放入函數中,而且在函數中外面還需要再加上一個中括號使之是列表的形式。

    結果如下所示:

    [[10 5][50 10][70 20][20 30]] (4, 2) [[[10 5]][[50 10]][[70 20]][[20 30]]]


    這是不閉合的情況,下面我們將False改為True,結果為:

    cv2.polylines(img, [pts], True, (0, 255, 255))

    1.6 添加文字

    img = cv2.putText( img, text, org, fontFace, fontScale, color[, thickness[, lineType[, bottomLeftOrigin]]] )

    參數:

  • text:待寫入的文字。
  • org:文字的左下角的位置,也叫起點。
  • fontFace:字體,具體見 OpenCV中的HersheyFonts。
  • fontScale:字體的縮放比例。
  • bottomLeftOrigin:若為True,圖像的原點在左下角,若為False,則為左上角。
  • 其他同上。
  • 看個例子:

    import numpy as np import cv2# 創建一張黑色的背景圖 img = np.zeros((512, 512, 3), np.uint8)# 添加文字“OpenCV”,起點(50,200) font = cv2.FONT_HERSHEY_SIMPLEX cv2.putText(img, 'OpenCV', (50,200), font, 3, (0, 255, 255), 5)winname = 'example' cv2.namedWindow(winname) cv2.imshow(winname, img) cv2.waitKey(0) cv2.destroyWindow(winname)

    結果如下所示:

    以上就是OpenCV中最常用的繪圖函數,下次筆記介紹圖像的幾何縮放。

    總結

    以上是生活随笔為你收集整理的OpenCV与图像处理学习三——线段、矩形、圆、椭圆、多边形的绘制以及文字的添加的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。