Mat是一个类,由两个数据部分组成:局枕头(包含矩阵尺寸、存储方法、存储地址等信息)和一个指向存储所有像素值的矩阵(根据所选存储方法的不同,矩阵可以是不同的维数)的指针。
Mat初始化方法
Mat m(行数,列数,类型,颜色)
其中类型CV_8UC3表示8位无符号字符型3通道,颜色例如Scalar(0,100,255),表示的是RGB值
#include<iostream>
#include<opencv2/opencv.hpp>
#include"opencv2/highgui/highgui.hpp"
using namespace cv;
using namespace std;
int main()
{
Mat img1(1, 5, CV_8UC1, Scalar(1));
Mat img2(1, 5, CV_8UC1, Scalar(2));
Mat img3(1, 5, CV_8UC1, Scalar(3));
cout << img1 << endl << img2 << endl << img3 << endl;
cout << endl;
img3.copyTo(img1);//把img3赋值到img1
cout << "copyto结果" << endl << img1 << endl << img2 << endl << img3 << endl;
return 0;
}
#include<iostream>
#include<opencv2/opencv.hpp>
#include"opencv2/highgui/highgui.hpp"
using namespace cv;
using namespace std;
int main()
{
Mat img1(1,5,CV_8UC1,Scalar(1));
Mat img2(1, 5, CV_8UC1, Scalar(0));
Mat img3(1, 5, CV_8UC1, Scalar(0));
img1 = img3.clone();
cout << img1 << endl;
cout << img2 << endl;
return 0;
}
点的表示:Point类
Point p;
p.x=10;
p.y=8;
或者
Point p=Point(10,8);
颜色的表示:Scalar类
Scalar(R,G,B)
尺寸的表示:Size类
暂不清楚
矩形的表示:Rect类
Rect类的成员变量有x、y、width、height,分别意义为左上角点的坐标和矩形的宽高。
常用的成员函数有:
Size(),返回值为Size
area(),返回值为晶=矩形的面积
contains(Point),判断点是否在矩形内。是就返回1
inside(Rect),判断矩形是否在该矩形内
tl(),top left,返回左上角点坐标
br(),bottom right,返回右下角点坐标
矩形的交集:Rect rect=rect1 & rect2
矩形的并集:Rect rect=rect1 | rect2
矩形的平移:Rect rectshift = rect + point
矩形的缩放:Rect rectScale = rect + size
#include<iostream>
#include<opencv2/opencv.hpp>
#include"opencv2/highgui/highgui.hpp"
using namespace cv;
using namespace std;
int main()
{
Rect r = Rect(100, 50, 50,100);
Point p = Point(120, 120);
cout << r.size() << endl;//尺寸
cout << r.area() << endl;//面积
cout << r.contains(p) << endl;//点是否在矩形内
cout << r.tl() << endl;//左上点
cout << r.br() << endl;//右下点
}
画椭圆(弧线)
函数ellipse用法
ellipse(图像,中心点坐标,宽高,弧线顺时针旋转度数,弧线顺时针起点度数(从x正半轴转),弧线终点度数,线颜色,厚度,线型)
#include<iostream>
#include<opencv2/opencv.hpp>
#define WINDOW_WIDTH 600
using namespace cv;
using namespace std;
//绘制椭圆
void DrawEllipse(Mat img, double angle)
{
int thickhness = 2;
int lineType = 8;
ellipse(img,
Point(WINDOW_WIDTH / 2, WINDOW_WIDTH / 2),
Size(WINDOW_WIDTH / 2, WINDOW_WIDTH / 4),
angle,
0, 300,
Scalar(255, 129, 0),
thickhness,
lineType);
}
int main()
{
Mat img(WINDOW_WIDTH,WINDOW_WIDTH,CV_8UC3,Scalar(255,255,255));//初始化画布
DrawEllipse(img, 22);
imshow("1", img);
waitKey(0);
}
特别地:当把线的厚度thickness改为-1以后,是这样的
画圆
函数circle用法
circle(图像,中心点坐标,半径,颜色,厚度,线型)
#include<iostream>
#include<opencv2/opencv.hpp>
#define WINDOW_WIDTH 600
using namespace cv;
using namespace std;
void DrawEllipse(Mat img, Point center)
{
int thickhness = 2;
int lineType = 8;
circle(img,
center,
WINDOW_WIDTH / 5,
Scalar(0, 0, 255),
thickhness,
lineType);
}
int main()
{
Mat img(WINDOW_WIDTH,WINDOW_WIDTH,CV_8UC3,Scalar(255,255,255));//初始化画布
DrawEllipse(img, Point(WINDOW_WIDTH/2, WINDOW_WIDTH/2));
imshow("1", img);
waitKey(0);
}
特别地,把厚度thickness改为-1后,就变成实心圆
#include<iostream>
#include<opencv2/opencv.hpp>
#define WINDOW_WIDTH 600
using namespace cv;
using namespace std;
void DrawLine(Mat img, Point start,Point end)
{
int thickhness = 2;
int lineType = 8;
line(img,
start,
end,
Scalar(0, 0, 255),
thickhness,
lineType);
}
int main()
{
Mat img(WINDOW_WIDTH,WINDOW_WIDTH,CV_8UC3,Scalar(255,255,255));//初始化画布
DrawLine(img, Point(WINDOW_WIDTH/8, WINDOW_WIDTH/8), Point(WINDOW_WIDTH / 2, WINDOW_WIDTH /2));
imshow("1", img);
waitKey(0);
}