基本图形绘制
OpenCV是一个强大的计算机视觉库,提供了许多绘图功能,用于在图像上绘制各种图形和文本。
-
画线:使用 Imgproc.line()
函数可以在图像上绘制直线。该函数需要指定图像、起点和终点坐标以及线条颜色。 -
画矩形:使用 Imgproc.rectangle()
函数可以在图像上绘制矩形。该函数需要指定图像、矩形左上角和右下角坐标以及线条颜色。 -
画圆:使用 Imgproc.circle()
函数可以在图像上绘制圆形。该函数需要指定图像、圆心坐标、半径和线条颜色。 -
画椭圆:使用 Imgproc .ellipse()
函数可以在图像上绘制椭圆。该函数需要指定图像、椭圆中心点、长轴和短轴半径以及线条颜色。 -
画多边形:使用 Imgproc.polylines()
函数可以在图像上绘制多边形。该函数需要指定图像、多边形的顶点坐标和线条颜色。 -
绘制文本:使用 Imgproc.putText()
函数可以在图像上绘制文本。该函数需要指定图像、文本内容、位置坐标、字体大小和颜色等参数。
图形绘制示例
「绘制直线」
public static void line(Mat img,Point pt1,Point pt2,Scalar color ,int thickness,int lineType, int shift);
参数
-
img:需要绘制的图像Mat -
pt1:直线起点坐标 -
pt2:直线终点坐标 -
color:直线的颜色 -
thickness:直线的宽度 -
lineType,边界的类型,可取值为FILLED ,LINE_4 ,LINE_8 和LINE_AA -
shift,点坐标中的小数位数
mBitmap?.run {
val bitmap = Bitmap.createBitmap(this.width, this.height, Bitmap.Config.ARGB_8888)
val srcMat = Mat()
Utils.bitmapToMat(this, srcMat)
Imgproc.line(
srcMat,
Point(0.0, srcMat.height().toDouble()),
Point(srcMat.width().toDouble(), 0.0),
Scalar(255.0, 0.0, 0.0, 255.0),
50,
Imgproc.LINE_AA,
0
)
Utils.matToBitmap(srcMat, bitmap)
runOnUiThread { mBinding.ivImage.setImageBitmap(bitmap) }
srcMat.release()
}

「绘制圆形」
public static void circle(Mat img, Point center, int radius, Scalar color, int thickness, int lineType, int shift)
参数
-
img:需要绘制的图像Mat。 -
center:圆心坐标。 -
radius:圆半径。 -
color:绘制直线的颜色。 -
thickness:直线的宽度。 -
lineType,边界的类型,可取值为FILLED ,LINE_4 ,LINE_8 和LINE_AA -
shift,点坐标中的小数位数
mBitmap?.run {
val bitmap = Bitmap.createBitmap(this.width, this.height, Bitmap.Config.ARGB_8888)
val srcMat = Mat()
Utils.bitmapToMat(this, srcMat)
Imgproc.circle(
srcMat,
Point((srcMat.width() / 2).toDouble(), (srcMat.height() / 2).toDouble()),
600,
Scalar(255.0, 0.0, 0.0, 255.0),
50,
Imgproc.LINE_AA,
0
)
Utils.matToBitmap(srcMat, bitmap)
runOnUiThread { mBinding.ivImage.setImageBitmap(bitmap) }
srcMat.release()
}

「绘制矩形」
public static void rectangle(Mat img, Point pt1, Point pt2, Scalar color, int thickness, int lineType, int shift)
参数
-
img:需要绘制的图像Mat -
pt1:矩形左上角 -
pt2:矩形右下角 -
color:直线的颜色 -
thickness:直线的宽度,负值表示填充 -
lineType,边界的类型,可取值为FILLED ,LINE_4 ,LINE_8 和LINE_AA -
shift,点坐标中的小数位数
mBitmap?.run {
val bitmap = Bitmap.createBitmap(this.width, this.height, Bitmap.Config.ARGB_8888)
val srcMat = Mat()
Utils.bitmapToMat(this, srcMat)
Imgproc.rectangle(
srcMat,
Point(0.0, 50.0),
Point((srcMat.width() / 2).toDouble(), (srcMat.height() / 2).toDouble()),
Scalar(255.0, 0.0, 0.0, 255.0),
50,
Imgproc.LINE_AA,
0
)
Utils.matToBitmap(srcMat, bitmap)
runOnUiThread { mBinding.ivImage.setImageBitmap(bitmap) }
srcMat.release()
}

OpenCV基本的绘制函数使用比较简单只要明白每个函数中各个参数的含义即可。如果将这些函数组合起来使用,jiu可以做一些相对高级的应用。
原文始发于微信公众号(沐雨花飞蝶):OpenCV基本图形绘制
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/256080.html