opencv3——常用类及常用图形的画法

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);
}


在这里插入图片描述

发布了51 篇原创文章 · 获赞 7 · 访问量 1万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览