您的位置:

cv2.circle函数的多方面阐述

一、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

可以看到,我们成功地生成了一个由小圆形组成的图案。