本文分享自華為云社區《[Python從零到壹] 三十五.影像處理基礎篇之OpenCV繪制各類幾何圖形》,作者:eastmount,
一.繪制直線
在OpenCV中,繪制直線需要獲取直線的起點和終點坐標,呼叫cv2.line()函式實作該功能,該函式原型如下所示:
- img = line(img, pt1, pt2, color[, thickness[, lineType[, shift]]])
– img表示需要繪制的那幅影像
– pt1表示線段第一個點的坐標
– pt2表示線段第二個點的坐標
– color表示線條顏色,需要傳入一個RGB元組,如(255,0,0)代表藍色
– thickness表示線條粗細
– lineType表示線條的型別
– shift表示點坐標中的小數位數
下面的代碼是繪制一條直線,通過np.zeros()創建一幅黑色影像,接著呼叫cv2.line()繪制直線,引數包括起始坐標和顏色、粗細,
# -*- coding:utf-8 -*-
# By:Eastmount
import cv2
import numpy as np
#創建黑色影像
img = np.zeros((256,256,3), np.uint8)
#繪制直線
cv2.line(img, (0,0), (255,255), (55,255,155), 5)
#顯示影像
cv2.imshow("line", img)
#等待顯示
cv2.waitKey(0)
cv2.destroyAllWindows()
輸出結果如圖3-1所示,從坐標(0,0)到(255,255)繪制一條直線,其直線顏色為(55,255,155),粗細為5,

二.繪制矩形
在OpenCV中,繪制矩形通過cv2.rectangle()函式實作,該函式原型如下所示:
- img = rectangle(img, pt1, pt2, color[, thickness[, lineType[, shift]]])
– img表示需要繪制的那幅影像
– pt1表示矩形的左上角位置坐標
– pt2表示矩形的右下角位置坐標
– color表示矩形的顏色
– thickness表示邊框的粗細
– lineType表示線條的型別
– shift表示點坐標中的小數位數
下面的代碼是繪制一個矩形,通過np.zeros()創建一幅黑色影像,接著呼叫cv2.rectangle()繪制矩形,
# -*- coding:utf-8 -*-
# By:Eastmount
import cv2
import numpy as np
#創建黑色影像
img = np.zeros((256,256,3), np.uint8)
#繪制矩形
cv2.rectangle(img, (20,20), (150,250), (255,0,0), 2)
#顯示影像
cv2.imshow("rectangle", img)
#等待顯示
cv2.waitKey(0)
cv2.destroyAllWindows()
輸出結果如圖3-2所示,從左上角坐標為(20,20),右下角坐標為(150,250),繪制的矩形顏色為藍色(255,0,0),粗細為2,

三.繪制圓形
在OpenCV中,繪制矩形通過cv2.rectangle()函式實作,該函式原型如下所示:
- img = circle(img, center, radius, color[, thickness[, lineType[, shift]]])
– img表示需要繪制圓的影像
– center表示圓心坐標
– radius表示圓的半徑
– color表示圓的顏色
– thickness如果為正值,表示圓輪廓的厚度;負厚度表示要繪制一個填充圓
– lineType表示圓的邊界型別
– shift表示中心坐標和半徑值中的小數位數
下面代碼是繪制一個圓形,
# -*- coding:utf-8 -*-
# By:Eastmount
import cv2
import numpy as np
#創建黑色影像
img = np.zeros((256,256,3), np.uint8)
#繪制圓形
cv2.circle(img, (100,100), 50, (255,255,0), 4)
#顯示影像
cv2.imshow("circle", img)
#等待顯示
cv2.waitKey(0)
cv2.destroyAllWindows()
輸出結果如圖3-3所示,它在圓形為(100,100)的位置,繪制了一個半徑為50,顏色為(255,255,0)、粗細為4的圓,

注意,如果將粗細設定為“-1”,則繪制的圓為實心,如圖3-4所示,
- cv2.circle(img, (100,100), 50, (255,255,0), -1)

四.繪制橢圓
在OpenCV中,繪制橢圓比較復雜,要多輸入幾個引數,如中心點的位置坐標,長軸和短軸的長度,橢圓沿逆時針方向旋轉的角度等,cv2.ellipse()函式原型如下所示:
- img = ellipse(img, center, axes, angle, startAngle, endAngle, color[, thickness[, lineType[, shift]]])
– img表示需要繪制橢圓的影像
– center表示橢圓圓心坐標
– axes表示軸的長度(短半徑和長半徑)
– angle表示偏轉的角度(逆時針旋轉)
– startAngle表示圓弧起始角的角度(逆時針旋轉)
– endAngle表示圓弧終結角的角度(逆時針旋轉)
– color表示線條的顏色
– thickness如果為正值,表示橢圓輪廓的厚度;負值表示要繪制一個填充橢圓
– lineType表示圓的邊界型別
– shift表示中心坐標和軸值中的小數位數
下面是繪制一個橢圓的代碼,
# -*- coding:utf-8 -*-
# By:Eastmount
import cv2
import numpy as np
#創建黑色影像
img = np.zeros((256,256,3), np.uint8)
#繪制橢圓
#橢圓中心(120,100) 長軸和短軸為(100,50)
#偏轉角度為20
#圓弧起始角的角度0 圓弧終結角的角度360
#顏色(255,0,255) 線條粗細2
cv2.ellipse(img, (120, 100), (100, 50), 20, 0, 360, (255, 0, 255), 2)
#顯示影像
cv2.imshow("ellipse", img)
#等待顯示
cv2.waitKey(0)
cv2.destroyAllWindows()
輸出結果如圖3-5所示,其橢圓中心為(120,100),長軸為100,短軸為50,偏轉角度為20,圓弧起始角的角度為0,圓弧終結角的角度為360,表示一個完整的橢圓,繪制的顏色為(255,0,255),粗細為2,

五.繪制多邊形
在OpenCV中,呼叫cv2.polylines()函式繪制多邊形,它需要指定每個頂點的坐標,通過這些點構建多邊形,其函式原型如下所示:
- img = polylines(img, pts, isClosed, color[, thickness[, lineType[, shift]]])
– img表示需要繪制的影像
– center表示多邊形曲線陣列
– isClosed表示繪制的多邊形是否閉合,False表示不閉合
– color表示線條的顏色
– thickness表示線條粗細
– lineType表示邊界型別
– shift表示頂點坐標中的小數位數
下面是繪制一個多邊形的代碼,
# -*- coding:utf-8 -*-
# By:Eastmount
import cv2
import numpy as np
#創建黑色影像
img = np.zeros((256,256,3), np.uint8)
#繪制多邊形
pts = np.array([[10,80], [120,80], [120,200], [30,250]])
cv2.polylines(img, [pts], True, (255, 255, 255), 5)
#顯示影像
cv2.imshow("ellipse", img)
#等待顯示
cv2.waitKey(0)
cv2.destroyAllWindows()
輸出結果如圖3-6所示,繪制的多邊形為白色的閉合圖形,

下面的代碼是繪制一個五角星多邊形,
# -*- coding:utf-8 -*-
# By:Eastmount
import cv2
import numpy as np
#創建黑色影像
img = np.zeros((512,512,3), np.uint8)
#繪制多邊形
pts = np.array([[50, 190], [380, 420], [255, 50], [120, 420], [450, 190]])
cv2.polylines(img, [pts], True, (0, 255, 255), 10)
#顯示影像
cv2.imshow("ellipse", img)
#等待顯示
cv2.waitKey(0)
cv2.destroyAllWindows()
輸出結果如圖3-7所示,它將五個頂點左邊分別連接起來,構成了一個黃色的五角星,

六.繪制文字
在OpenCV中,呼叫cv2.putText()函式添加對應的文字,其函式原型如下所示:
- img = putText(img, text, org, fontFace, fontScale, color[, thickness[, lineType[, bottomLeftOrigin]]])
– img表示要繪制的影像
– text表示要繪制的文字
– org表示要繪制的位置,影像中文本字串的左下角
– fontFace表示字體型別,具體查看see cv::HersheyFonts
– fontScale表示字體的大小,計算為比例因子乘以字體特定的基本大小
– color表示字體的顏色
– thickness表示字體的粗細
– lineType表示邊界型別
– bottomLeftOrigin如果為真,則影像資料原點位于左下角,否則它在左上角
下面是繪制文字的代碼,
# -*- coding:utf-8 -*-
# By:Eastmount
import cv2
import numpy as np
#創建黑色影像
img = np.zeros((256,256,3), np.uint8)
#繪制文字
font = cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(img, 'I love Python!I love Huawei!',
(10, 100), font, 0.5, (255, 255, 0), 2)
#顯示影像
cv2.imshow("polylines", img)
#等待顯示
cv2.waitKey(0)
cv2.destroyAllWindows()
輸出結果如圖3-8所示,繪制的文字為“I love Python!I love Huawei!”,

七.總結
本文詳細介紹了OpenCV繪制幾何圖形的方法,利用cv2.line()、v2.circle()、cv2.rectangle()、cv2.ellipse()、cv2.polylines()、cv2.putText()函式實作,初學者通過這篇文章將了解基礎圖形繪制的基礎用法,為后續應用提供幫助,同時,建議讀者結合這篇文章實作一個畫圖軟體,您可以嗎?
點擊關注,第一時間了解華為云新鮮技術~?
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/437021.html
標籤:AI
上一篇:輕量級Visual Transformer模型——LeViT(ICCV2021)
下一篇:pandas使用shift函式對數資料進行向上偏移(-1)或者向下偏移(1)、索引不移動,移動之后無值的賦值為NaN、將原資料列與偏移后的資料列相加生成新的資料列
