专栏简介 | ||
💒个人主页 |
📖心灵鸡汤📖 我们唯一拥有的就是今天,唯一能把握的也是今天 建议把本文当作笔记来看,据说专栏目录里面有相应视频🤫 |
📰专栏目录 |
Imgproc之图像绘制
本节内容比较简单,但是很重要
一、直线绘制
线段被图像边界裁剪。对于非抗锯齿的整数坐标线,使用8-连接或4-连接的Bresenham算法。粗线以圆角结束绘制。抗锯齿线使用高斯滤波器绘制。
字段
LINE_4 | 使用4点线段。这通常用于表示直线,使用起点和终点坐标 |
LINE_8 | 使用8点线段。这提供了更多的控制点,可以用于更精确地表示曲线或直线 |
LINE_AA | 使用抗锯齿线段。抗锯齿技术用于平滑线条的边缘,使其看起来更平滑和自然 |
1.带箭直线绘制
1.在给定的图像上,从第一个点到第二个点绘制一个箭头线段
arrowedLine(Mat img, Point pt1, Point pt2, Scalar color, int thickness, int line_type, int shift, double tipLength) | |
参数: | |
img | 要绘制线段的图像 |
pt1 | 线段的起始点坐标 |
pt2 | 线段的终点坐标 |
color | 线段的颜色 |
thickness | 线段的粗细 |
line_type | 线段的类型。 参见 #LINE_* |
shift | 坐标点的小数位数 |
tipLength | 箭头尖端的长度与箭头长度之间的关系 |
//创建一个图像
Mat mat = new Mat(400,400, CvType.CV_8UC3);
//设置颜色
mat.setTo(new Scalar(0,0,0));
// 定义线段的起始点和终点坐标
Point pt1 = new Point(50, 50);
Point pt2 = new Point(350, 350);
// 定义线段的颜色
Scalar color = new Scalar(0, 0, 255);
int lineType=Imgproc.LINE_AA;
Imgproc.arrowedLine(mat,pt1,pt2,color,10, lineType, 0, 0.1);
HighGui.imshow("mat",mat);
HighGui.waitKey();
结果:
2.普通直线绘制
1.line
1.图像上绘制直线(线段被图像边界裁剪)
line(Mat img, Point pt1, Point pt2, Scalar color, int thickness, int lineType, int shift) | |
参数: | |
img | 要绘制线段的图像 |
pt1 | 线段的起始点坐标 |
pt2 | 线段的终点坐标 |
color | 线段的颜色 |
thickness | 线段的粗细 |
line_type | 线段的类型。 参见 #LINE_* |
shift | 坐标点的小数位数 |
//创建矩阵
Mat img = new Mat(200,300, CvType.CV_8UC3,new Scalar(0,0,0) );
//定义线段开始结束坐标pt1
Point pt1 = new Point(20,20);
Point pt2 = new Point(100,100);
Point pt3 = new Point(150,100);
//定义绘制的颜色
Scalar scalar= new Scalar(0,255,0);
//定义线条粗细
int thickness = 2;
//定义线条类型
int lineType=Imgproc.LINE_AA;
//定义点坐标小数位数
int shift=0;
Imgproc.line(img,pt1,pt2,scalar,thickness,lineType,shift);
Imgproc.line(img,pt2,pt3,scalar,thickness,lineType,shift);
//显示
HighGui.imshow("img",img);
HighGui.waitKey();
结果:
2.polylines
1.绘制多段线
polylines(Mat img, java.util.List pts, boolean isClosed, Scalar color, int thickness, int lineType, int shift) | |
参数: | |
img | 要绘制线段的图像 |
pts | 包含多段线顶点的 java.util.List 对象。每个 MatOfPoint 对象表示多段线的一个单独部分 |
isClosed | 一个布尔值,指示多段线是否闭合。如果为 true,则多段线闭合;如果为 false,则不闭合 |
color | 线段的颜色 |
thickness | 线段的粗细 |
line_type | 线段的类型。 参见 #LINE_* |
shift | 坐标点的小数位数 |
Mat mat = new Mat(500,500, CvType.CV_8UC3);
mat.setTo(new Scalar(255,255,255));
List<MatOfPoint> pts = new ArrayList<>();
MatOfPoint point = new MatOfPoint();
point.fromArray(new Point(50,50),new Point(150,90),new Point(80,180),