部分笔记参考自点击这里
cv::Point与cv::Scalar
Point表示2D平面上的一个点(x, y)
Point p;
p.x = 11;
p.y = 14;
或者
Point p = Point(11, 14);
1
Scalar表示四个元素的向量
Scalar(a, b, c, d)//a = blue, b = green, c = red, d = alpha;
绘制线:cv::line
第一个参数:表示绘制的目标图像的Mat对象
第二个参数:表示绘制的起点坐标的Point对象
第三个参数:表示绘制的终点坐标的Point对象
第四个参数:表示绘制线的颜色的Scalar对象
第五个参数:表示线的宽度
第六个参数:表示线的类型(LINE_4\LINE_8\LINE_AA)
绘制椭圆:cv::ellipse
第一个参数:表示背景图像的Mat对象
第二个参数:表示椭圆中心点的Point对象
第三个参数:表示椭圆半径的Size对象,如Size(src.cols/4, src.rows/8)
第四个参数:表示椭圆沿椭圆中心点的顺时针方向旋转的角度
第五个参数:表示椭圆弧长绘制的开始角度
第六个参数:表示椭圆弧长绘制的结束角度
第七个参数:表示绘制线的颜色的Scalar对象
第八个参数:表示线的宽度
第九个参数:表示线的类型(LINE_4\LINE_8\LINE_AA)
绘制矩形:cv::rectange
第一个参数:表示背景图像(画布)的Mat对象
第二个参数:表示矩形范围Rect对象,Rect对象的第一个参数表示矩形左上角顶点的x坐标,第二个参数表示矩形左上角顶点的y坐标,第三个参数表示矩形的宽度,第四个参数表示矩形的高度
第三个参数:表示绘制线的颜色的Scalar对象
第四个参数:表示线的宽度
第五个参数:表示线的类型(LINE_4\LINE_8\LINE_AA)
绘制圆:cv::circle
第一个参数:表示背景图像(画布)的Mat对象
第二个参数:表示圆心坐标的Point对象
第三个参数:表示圆的半径
第四个参数:表示绘制线的颜色的Scalar对象
第五个参数:表示线的宽度
第六个参数:表示线的类型(LINE_4\LINE_8\LINE_AA)
绘制填充多边形:cv::fillPoly
第一个参数:表示背景图像(画布)的Mat对象
第二个参数:表示要绘制的轮廓的点的Point的二级指针,有二维数组初始化
第三个参数:表示对于轮廓需要绘制的点的个数,为一位数组或者一级指针
第四个参数:绘制的轮廓数
第五个参数:表示绘制线的颜色的Scalar对象
第六个参数:表示线的类型(LINE_4\LINE_8\LINE_AA)
绘制文字:cv::putText
第一个参数:表示背景图像(画布)的Mat对象
第二个参数:表示要绘制的文字内容
第三个参数:绘制文字的位置坐标的Point对象
第四个参数:待绘制文字的字体
第五个参数:待绘制文字的缩放比例
第六个参数:表示绘制线的颜色的Scalar对象
第七个参数:表示线的宽度
第八个参数:表示线的类型(LINE_4\LINE_8\LINE_AA)
生成随机线
-
随机数生成cv::RNG
随机数生成器RNG rng(12345);
生成正态分布随机数uniform(int a, int b),随机生成啊[a, b)之间的数
参考代码
#include<opencv2/opencv.hpp>
#include<iostream>
using namespace std;
using namespace cv;
//各个函数的声明
void myline();
void myellipse();
void myrectangle();
void mycircle();
void myfillPoly();
void myputText();
void myrng();
/*主程序进入口*/
int main()
{
//函数的调用
myline();
myellipse();
myrectangle();
mycircle();
myfillPoly();
myputText();
myrng();
return 0;
}
/*各个函数的定义*/
//绘制直线
void myline() {
Mat lineimage(500,500,CV_8UC3,Scalar(0,0,0));
Scalar color=Scalar(255,0,0);
Point p1=Point(100,100);
Point p2=Point(300,300);
line(lineimage,p1,p2,color,1,LINE_8);
namedWindow("绘制直线");
imshow("绘制直线",lineimage);
waitKey(0);
}
//绘制椭圆
void myellipse() {
Mat ellipseimage(500,500,CV_8UC3,Scalar(0,0,0));
Scalar color=Scalar(255,0,0);
Point p1=Point(ellipseimage.cols/2,ellipseimage.rows/2);
Size size=Size(ellipseimage.cols/4,ellipseimage.rows/8);
ellipse(ellipseimage,p1,size,0,0,360,color,1,LINE_8);
namedWindow("绘制椭圆");
imshow("绘制椭圆",ellipseimage);
waitKey(0);
}
//绘制矩形
void myrectangle() {
Mat rectangleimage(500,500,CV_8UC3,Scalar(0,0,0));
Scalar color=Scalar(255,0,0);
Point p1;
p1.x=rectangleimage.cols/2;
p1.y=rectangleimage.rows/2;
rectangle(rectangleimage,Rect(p1.x,p1.y,100,100),color,1,LINE_8);
namedWindow("绘制矩形");
imshow("绘制矩形",rectangleimage);
waitKey(0);
}
//绘制圆
void mycircle() {
Mat circleimage(500,500,CV_8UC3,Scalar(0,0,0));
Scalar color(255,0,0);
Point p1=Point(circleimage.cols/2,circleimage.rows/2);
circle(circleimage,p1,100,color,1,LINE_8);
namedWindow("绘制圆");
imshow("绘制圆",circleimage);
waitKey(0);
}
//绘制填充多边形
void myfillPoly() {
Mat fillPolyimage(500,500,CV_8UC3,Scalar(0,0,0));
Scalar color=Scalar(255,0,0);
Point p[4];
p[0]=Point(100,100);
p[1]=Point(100,300);
p[2]=Point(200,300);
p[3]=Point(200,100);
const Point* pp[] = { p };
int number[] = {4};
fillPoly(fillPolyimage,pp,number,1,color,LINE_8);
namedWindow("绘制填充多边形");
imshow("绘制填充多边形",fillPolyimage);
waitKey(0);
}
//绘制文字
void myputText() {
Mat putTextimage(500,500,CV_8UC3,Scalar(0,0,0));
Scalar color=Scalar(255,0,0);
Point p1=Point(100,100);
putText(putTextimage,"pipihan",p1,CV_FONT_HERSHEY_COMPLEX,1.0,color,1,LINE_8);
namedWindow("绘制文字");
imshow("绘制文字",putTextimage);
waitKey(0);
}
//绘制随机直线
void myrng() {
RNG rng(12345);//生成高斯随机函数
Point p1;
Point p2;
Mat RNGimage(500,500,CV_8UC3,Scalar(0,0,0));
for(int i=0;i<10;i++) {
p1.x=rng.uniform(0,RNGimage.cols);//生成任意x坐标
p2.x=rng.uniform(0,RNGimage.cols);
p1.y=rng.uniform(0,RNGimage.rows);//生成任意y坐标
p2.y=rng.uniform(0,RNGimage.rows);
Scalar color=Scalar(rng.uniform(0,255),rng.uniform(0,255),rng.uniform(0,255));//随机生成颜色
line(RNGimage,p1,p2,color,1,LINE_8);//画直线
}
namedWindow("绘制随机直线");
imshow("绘制随机直线",RNGimage);
waitKey(0);
}
效果图