一、基礎概念
cv2.ellipse是OpenCV中一個非常常用的函數,它可以用來在圖像上繪製橢圓。該函數的基本用法如下:
cv2.ellipse(img, center, axes, angle, startAngle, endAngle, color[, thickness[, lineType[, shift]]])
參數含義如下:
- img:要繪製橢圓的圖像
- center:橢圓中心的坐標
- axes:橢圓半長軸和半短軸的長度
- angle:橢圓旋轉角度
- startAngle:橢圓起始角度(順時針方向,以x軸正半軸為起點)
- endAngle:橢圓終止角度(順時針方向,以x軸正半軸為起點)
- color:橢圓的顏色,以BGR格式表示
- thickness:橢圓邊框的粗細,如果為負數,則表示填充橢圓的顏色
- lineType:橢圓邊框的線型,可以為cv2.LINE_AA等
- shift:坐標點小數點位數
二、參數解釋
1. center參數
以坐標系的原點為中心,有一個長度為100的x軸和長度為50的y軸,我們畫出它們的交點(即坐標系原點),然後在該點畫出一個填充紅色的橢圓:
import numpy as np
import cv2
# 創建黑色背景
img = np.zeros((512,512,3), np.uint8)
# 繪製坐標系
cv2.line(img, (0,256), (512,256), (255,255,255), 1)
cv2.line(img, (256,0), (256,512), (255,255,255), 1)
# 繪製橢圓
color = (0, 0, 255)
center = (256, 256)
axes = (100, 50)
angle = 0
startAngle = 0
endAngle = 360
cv2.ellipse(img, center, axes, angle, startAngle, endAngle, color, -1)
# 顯示圖片
cv2.imshow("img", img)
cv2.waitKey()
cv2.destroyAllWindows()
運行該代碼,即可得到以下結果:
2. axes參數
在上一個例子中,我們使用了axes參數來調整橢圓長軸和短軸的長度。如果將axes設置為(50,100),則橢圓的形狀就會變成橫向拉伸了:
...
# 繪製橢圓
color = (0, 0, 255)
center = (256, 256)
axes = (50, 100) # 此處修改為(50, 100)
angle = 0
startAngle = 0
endAngle = 360
cv2.ellipse(img, center, axes, angle, startAngle, endAngle, color, -1)
...
得到的結果如下:
3. angle參數
在上一個例子中,我們使用了angle參數來調整橢圓的旋轉角度。如果將angle設置為45,則橢圓會向左上角旋轉45度:
...
# 繪製橢圓
color = (0, 0, 255)
center = (256, 256)
axes = (50, 100)
angle = 45 # 此處修改為45
startAngle = 0
endAngle = 360
cv2.ellipse(img, center, axes, angle, startAngle, endAngle, color, -1)
...
得到的結果如下:
4. startAngle和endAngle參數
在上一個例子中,我們使用了startAngle和endAngle參數來調整橢圓的起始角度和終止角度。如果將startAngle設置為45,endAngle設置為135,則繪製出的橢圓就會只有上方一半,而下方被裁去:
...
# 繪製橢圓
color = (0, 0, 255)
center = (256, 256)
axes = (50, 100)
angle = 45
startAngle = 45 # 此處修改為45
endAngle = 135 # 此處修改為135
cv2.ellipse(img, center, axes, angle, startAngle, endAngle, color, -1)
...
得到的結果如下:
三、附加特性
1. thickness參數
從上面的四個例子中可以看出,thickness參數控制了橢圓的邊框粗細和是否填充。如果thickness為正數,則表示繪製邊框,並且borderWidth表示邊框寬度;如果thickness為負數,則表示填充橢圓,並且thickness的絕對值表示填充顏色的透明度。下面是一個填充顏色的例子:
...
# 繪製橢圓
color = (0, 0, 255)
center = (256, 256)
axes = (100, 50)
angle = 0
startAngle = 0
endAngle = 360
cv2.ellipse(img, center, axes, angle, startAngle, endAngle, color, -1) # 修改thickness為-1,填充橢圓
# 顯示圖片
cv2.imshow("img", img)
cv2.waitKey()
cv2.destroyAllWindows()
得到的結果如下:
2. lineType參數
lineType參數可以控制邊框的線型,常見的線型有cv2.LINE_AA、cv2.LINE_4和cv2.LINE_8等。例如,將lineType設置為cv2.LINE_AA,則邊框會更加平滑:
...
# 繪製橢圓
color = (0, 0, 255)
center = (256, 256)
axes = (100, 50)
angle = 0
startAngle = 0
endAngle = 360
cv2.ellipse(img, center, axes, angle, startAngle, endAngle, color, 2, cv2.LINE_AA) # 修改thickness為2,線型為cv2.LINE_AA
# 顯示圖片
cv2.imshow("img", img)
cv2.waitKey()
cv2.destroyAllWindows()
得到的結果如下:
四、總結
通過本文的介紹,我們了解了cv2.ellipse的基本用法和參數含義,並且介紹了一些可選參數。cv2.ellipse是OpenCV中非常常用的函數,對於繪製橢圓形的圖形處理來說,非常有效。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/295495.html