OpenCV(cv::circle())
cv::circle()
是 OpenCV 提供的一个函数,用于在图像上绘制圆形。它非常适用于在图像处理任务中标记特定的点或区域。这个函数具有多种参数,允许你根据需要控制圆的颜色、位置、半径和边界厚度。
1. 函数
void cv::circle(InputOutputArray img, Point center, int radius, const Scalar& color, int thickness = 1, int lineType = LINE_8, int shift = 0)
参数:
-
img
(InputOutputArray):- 输入/输出图像。在此图像上绘制圆形。
- 图像可以是灰度图像或彩色图像。
-
center
(Point):- 圆心的坐标,用
cv::Point(x, y)
表示。x
和y
是圆心的像素坐标。
- 圆心的坐标,用
-
radius
(int):- 圆的半径,以像素为单位。
-
color
(Scalar):- 圆的颜色。
- 对于彩色图像,颜色通过
cv::Scalar(blue, green, red)
定义,注意顺序为 BGR。 - 对于灰度图像,颜色为单个强度值,如
cv::Scalar(255)
表示白色。
-
thickness
(int, 默认值 = 1):- 圆的边界厚度。
- 如果
thickness
为正数,则表示边界线的厚度。 - 如果
thickness = FILLED (-1)
,圆将被填充。
-
lineType
(int, 默认值 = LINE_8):- 线条的类型,可以是以下选项之一:
LINE_8
:8-connected 线条 (默认值)。LINE_4
:4-connected 线条。LINE_AA
:抗锯齿线条(更平滑的圆)。
- 线条的类型,可以是以下选项之一:
-
shift
(int, 默认值 = 0):- 圆心坐标和半径的小数位精度(位移)。默认值
0
表示整数精度。
- 圆心坐标和半径的小数位精度(位移)。默认值
2. 示例
以下是一个简单的使用 cv::circle()
函数绘制圆的例子:
#include <opencv2/opencv.hpp>
int main() {
// 创建一个黑色图像
cv::Mat img = cv::Mat::zeros(400, 400, CV_8UC3);
// 定义圆心坐标
cv::Point center(200, 200);
// 半径
int radius = 50;
// 颜色(蓝色 BGR:255, 0, 0)
cv::Scalar color(255, 0, 0);
// 绘制圆
cv::circle(img, center, radius, color, 2);
// 显示图像
cv::imshow("Circle", img);
cv::waitKey(0);
return 0;
}
3. 说明
- 抗锯齿圆:通过设置
lineType
为LINE_AA
,可以使圆的边缘更加平滑。这在绘制较大或较小的圆时非常有用。 - 坐标精度:如果你需要绘制亚像素级别的圆形,可以调整
shift
参数。例如,如果shift = 1
,则center.x = 2
实际表示1.0
像素。
4. 使用场景
- 在计算机视觉任务中用于标记检测到的特征点或对象中心位置。
- 用于在图像分析中可视化目标检测结果,例如目标检测算法中标记目标物体的位置。
- 在图像上绘制标志性区域或参考点以进行进一步处理。