一、circle函数简介
cv2.circle是OpenCV库中的绘图函数,其作用是在给定图像上画圆。该函数可以通过指定圆形的中心坐标、半径、颜色、线条宽度等参数来绘制出一个圆形。
cv2.circle(img, center, radius, color[, thickness[, lineType[, shift]]])
其中,参数含义如下:
img
:待绘制圆形的图像。center
:圆心坐标,通常为一个元组,即(x
,y
)。radius
:圆形半径。color
:圆形颜色。如果为三元组,则颜色顺序为BGR;如果为单个值,则颜色会被作为灰度值。thickness
:线条宽度。如果不指定或为负值,则函数会填充圆形。lineType
:线条类型。可以指定绘制线条时使用的算法类型,如CV_AA(抗锯齿)等。默认为8连通性(CV_8UC1)。shift
:像素位移。默认为0。
二、绘制圆形示例
下面是一个简单的代码示例,用cv2.circle绘制一个半径为50的红色圆形并显示在窗口中:
import cv2
import numpy as np
img = np.zeros((512, 512, 3), np.uint8) # 创建512x512的黑色图像
# 设置圆形参数
center = (256, 256)
radius = 50
color = (0, 0, 255)
thickness = 2
# 绘制圆形
cv2.circle(img, center, radius, color, thickness)
# 显示图像
cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
运行结果如下:
https://cdn.jsdelivr.net/gh/AIDeveloperCommunity/static/images/1619367872837833.png
可以看到,我们成功地在图像中绘制了一个红色圆形。
三、绘制圆弧
除了绘制圆形外,我们还可以使用cv2.circle函数绘制任意角度的圆弧。为此,需要设置起始角度和结束角度。其中,角度的单位为度数。
cv2.circle(img, center, radius, color[, thickness[, lineType[, shift]]])
与绘制圆形不同,需要注意的是,如果圆弧角度大于360度,则需要调整终止角度。例如,从30度开始,需要绘制270度的圆弧,则需要设置终止角度为300度(270+30)。
下面是一个代码示例,用cv2.circle绘制一个起始角度为30度,终止角度为300度,半径为80的蓝色圆弧,并显示在窗口中:
import cv2
import numpy as np
img = np.zeros((512, 512, 3), np.uint8) # 创建512x512的黑色图像
# 设置圆弧参数
center = (256, 256)
radius = 80
color = (255, 0, 0)
thickness = 2
start_angle = 30
end_angle = 300
# 绘制圆弧
cv2.circle(img, center, radius, color, thickness, lineType=cv2.LINE_AA)
cv2.ellipse(img, center, (radius, radius), 0, start_angle, end_angle, color, thickness, lineType=cv2.LINE_AA)
# 显示图像
cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
运行结果如下:
https://cdn.jsdelivr.net/gh/AIDeveloperCommunity/static/images/1619367879369433.png
可以看到,我们成功地在图像中绘制了一个蓝色圆弧。
四、绘制多边形
实际应用中,可能会出现需要绘制圆弧的情况。例如,绘制一个半径逐渐变化的圆环。此时,需要使用多条圆弧组成多边形。cv2.circle函数可以很容易地实现这一效果。
下面是一个代码示例,用cv2.circle绘制一个半径半径逐渐变化的圆环,并显示在窗口中:
import cv2
import numpy as np
img = np.zeros((512, 512, 3), np.uint8) # 创建512x512的黑色图像
# 设置圆环参数
center = (256, 256)
color = (0, 255, 0)
# 绘制圆环
for r in range(10, 100, 10):
cv2.circle(img, center, r, color, 2)
# 显示图像
cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
运行结果如下:
https://cdn.jsdelivr.net/gh/AIDeveloperCommunity/static/images/161936788584364.png
可以看到,我们成功地在图像中绘制了一个半径逐渐变化的圆环。
五、使用cv2.circle生成特定形状的图像
除了以上实例,cv2.circle还可以用来生成特定形状的图像。下面是一个简单的代码示例,用cv2.circle生成一个由小圆形组成的图案:
import cv2
import numpy as np
img = np.zeros((512, 512, 3), np.uint8) # 创建512x512的黑色图像
# 生成图案
for i in range(0, 300, 20):
for j in range(0, 300, 20):
cv2.circle(img, (i+10, j+10), 5, (255, 255, 255), -1)
cv2.circle(img, (i+10, j+10), 10, (0, 0, 255), 2)
# 显示图像
cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
运行结果如下:
https://cdn.jsdelivr.net/gh/AIDeveloperCommunity/static/images/1619367894522703.png
可以看到,我们成功地生成了一个由小圆形组成的图案。