Point和Scalar类型
Point类型
该类型表示一个2D的点,其坐标由图像中的 x x x和 y y y坐标确定。可以这样定义一个Point
对象:
Point pt;
pt.x = 10;
pt.y = 8;
或者:
Point pt{
Point(10, 8) };
Scalar类型
该类型表示一个四元素的向量或数组,常用于传递像素值。因为完整的BGR颜色值是包含4个值的,即使最后一个值通常不会进行定义,也可以用Scalar
类型来表示:
Scalar( b, g, r);
上面代码中的b
、g
、r
分别代表蓝色、绿色和红色值。
绘图操作
创建图片对象和显示窗口
char atom_window[]{
"画图 1: Atom" }; //窗口1的标题
char rook_window[]{
"画图 2: Rook" }; //窗口2的标题
Mat atom_image{
Mat::zeros(w, w, CV_8UC3) }; //atom图像矩阵,初始值为0
Mat rook_image{
Mat::zeros(w, w, CV_8UC3) }; //rook图像矩阵,初始值为0
绘制椭圆
OpenCV中可用ellipse()函数来画椭圆,下面的自定义函数MyEllipse()中包含了ellipse()的用法:
void MyEllipse(Mat img, double angle)
{
int thickness{
2 };
int lineType{
8 };
ellipse(img, //作图对象
Point(w / 2, w / 2), //中心
Size(w / 4, w / 16), //最长半径和最短半径
angle, //旋转角度
0, //显示的起始角度
360, //显示的终止角度,这两个参数决定显示弧长的多少
Scalar(255, 0, 0), //图形颜色:蓝色
thickness, //线条宽度
lineType); //线条类型:连续线条
}
以不同的角度画椭圆:
MyEllipse(atom_image, 90);
MyEllipse(atom_image, 0);
MyEllipse(atom_image, 45);
MyEllipse(atom_image, -45);
结果如下:
绘制圆
OpenCV中可用circle()函数绘制圆,其用法如下:
void MyFilledCircle(Mat img, Point center)
{
circle(img, //作图对象
center, //圆心
w / 32, //半径
Scalar(0, 0, 255), //图形颜色:红色
FILLED, //填充,相当于thickness=-1
LINE_8); //线条类型:连续线条
}
调用这个自定义的MyFilledCircle()函数:
MyFilledCircle(atom_image, Point(w / 2, w / 2));
得到如下结果:
绘制多边形
可用fillPoly()函数来绘制被填充颜色的多边形,其用法如下:
void MyPolygon(Mat img)
{
int lineType{
LINE_8 };
Point rook_points[1][20];
rook_points[0][0] = Point(w / 4, 7 * w / 8);
rook_points[0][1] = Point(3 * w / 4, 7 * w / 8);
rook_points[0][2] = Point(3 * w / 4, 13 * w / 16);
rook_points[0][3] = Point(11 * w / 16, 13 * w / 16);