OpenCV circle()函数的用法(附带实例)
全局函数 circle() 用来绘制或填充一个给定圆心和半径的圆,该函数声明如下:
下面来看一个示例,绘制奥迪车标。我们知道奥迪车标是 4 个圆圈,所以使用 circle() 函数来实现:
1) 打开 Qt Creator,新建一个控制台工程,工程名是 test。
2) 在 IDE 中打开 main.cpp,输入如下代码:
3) 保存工程并运行,结果如下图所示:
void cv::circle (InputOutputArray img, Point center,int radius,const Scalar & color, int thickness = 1, int lineType = LINE_8, int shift = 0);各个参数的含义如下:
- img 表示输入的图像(圆画在这个图像上);
- Center 表示圆心坐标;
- Radius 表示圆的半径;
- Color 表示圆的颜色,规则根据 B(蓝)G(绿)R(红),例如蓝色为 Scalar(255,0,0);
- Thickness 如果是正数,就表示组成圆的线条的粗细程度,否则表示圆是否被填充;
- lineType 表示线条的类型;
- Shift 表示圆心坐标点和半径值的小数位数。
下面来看一个示例,绘制奥迪车标。我们知道奥迪车标是 4 个圆圈,所以使用 circle() 函数来实现:
1) 打开 Qt Creator,新建一个控制台工程,工程名是 test。
2) 在 IDE 中打开 main.cpp,输入如下代码:
#include <iostream> #include <opencv2/imgproc/types_c.h> // for CV_RGB2GRAY #include <opencv2/core.hpp> #include <opencv2/highgui.hpp> #include <opencv2/imgproc.hpp> using namespace std; using namespace cv; int main(int argc, char** argv) { /* 生成一个 500×850 的 Mat 矩阵,8 位 3 通道(CV_8UC3) */ Mat image2 = Mat::zeros(500, 850, CV_8UC3); /* 演示:画一个实心圆(半径 63,圆心 (447,63),红色) */ circle(image2, Point(447, 63), 63, Scalar(0, 0, 255), -1); /*========== 开始绘制奥迪车标 ==========*/ /* 绘制第一个圆:半径 100,圆心 (200,300),紫色,线宽 7 */ circle(image2, Point(200, 300), 100, Scalar(225, 0, 225), 7, 8); /* 绘制第二个圆:半径 100,圆心 (350,300),线宽 7 */ circle(image2, Point(350, 300), 100, Scalar(225, 0, 225), 7, 8); /* 绘制第三个圆:半径 100,圆心 (500,300) */ circle(image2, Point(500, 300), 100, Scalar(225, 0, 225), 7, 8); /* 绘制第四个圆:半径 100,圆心 (650,300) */ circle(image2, Point(650, 300), 100, Scalar(225, 0, 225), 7, 8); /* 显示窗口 */ imshow("Audi logo", image2); waitKey(); return 0; }在上述代码中,我们先演示画了一个实心圆圈,它和奥迪车标无关。然后开始画 4 个空心圆圈作为奥迪车标,只需计算好它们之间的距离即可。
3) 保存工程并运行,结果如下图所示:
