--- highlight: androidstudio theme: juejin
使用OpenCV在mat上绘制几何图形:
- 直线
- 矩形
- 多边形
- 圆形
- 椭圆
- 文字
绘制直线
API:
public static void line(Mat img, Point pt1, Point pt2, Scalar color, int thickness, int lineType, int shift)
参数含义:
参数一:img,输入图像
参数二:pt1,起点
参数三:pt2,终点
参数四:color,绘制直线的颜色
参数五:thickness,直线宽度
参数六:lineType,边界的类型,可取值为FILLED ,LINE_4 ,LINE_8 和LINE_AA
参数七:shift,点坐标中的小数位数
示例:
fun drawLine(mat: Mat, imageView: ImageView) {
val start = Point(0.0, mat.height().toDouble())
val end = Point(mat.width().toDouble(),0.0)
Imgproc.line(mat, start, end, scalar, 10, Imgproc.LINE_8, 0)
showImage(mat, imageView)
}
绘制矩形
API:
public static void rectangle(Mat img, Point pt1, Point pt2, Scalar color, int thickness, int lineType, int shift)
参数含义:
参数一:img,输入图像
参数二:pt1,起点
参数三:pt2,终点
参数四:color,绘制直线的颜色
参数五:thickness,直线宽度。若为负值,表示填充
参数六:lineType,边界的类型,可取值为FILLED ,LINE_4 ,LINE_8 和LINE_AA
参数七:shift,点坐标中的小数位数
示例:
fun drawRectangle(mat: Mat, imageView: ImageView) {
val start = Point(80.0,80.0)
val end = Point(180.0,180.0)
Imgproc.rectangle(mat,start,end, scalar,10,Imgproc.LINE_8,0)
showImage(mat,imageView)
}
绘制多边形
API:
public static void polylines(Mat img, List<MatOfPoint> pts, boolean isClosed, Scalar color, int thickness, int lineType, int shift)
参数含义:
参数一:img,输入图像
参数二:pts,多边形端点坐标
参数三:isClosed,是否闭合
参数四:color,绘制直线的颜色
参数五:thickness,直线宽度
参数六:lineType,边界的类型,可取值为FILLED ,LINE_4 ,LINE_8 和LINE_AA
参数七:shift,点坐标中的小数位数
示例:
fun renderPoly(mat: Mat, imageView: ImageView) {
Imgproc.polylines(
mat,
listOf(
MatOfPoint(Point(10.0, 10.0), Point(200.0, 20.0), Point(10.0, 240.0), Point(80.0, 120.0))
),
true,
scalar,
4,
Imgproc.LINE_AA,
0)
showImage(mat,imageView)
}
绘制圆形
API:
public static void circle(Mat img, Point center, int radius, Scalar color, int thickness, int lineType, int shift)
参数含义:
参数一:img,输入图像
参数二:center,圆心坐标
参数三:radius,圆半径
参数四:color,绘制直线的颜色
参数五:thickness,直线宽度。若为负值,表示填充
参数六:lineType,边界的类型,可取值为FILLED ,LINE_4 ,LINE_8 和LINE_AA
参数七:shift,点坐标中的小数位数
示例:
fun renderCircle(mat: Mat, imageView: ImageView){
Imgproc.circle(
mat,
Point(90.0, 90.0),
55,
scalar,
5,
Imgproc.LINE_AA,
0
)
showImage(mat, imageView)
}
绘制椭圆
API:
public static void ellipse(Mat img, Point center, Size axes, double angle, double startAngle, double endAngle, Scalar color, int thickness, int lineType, int shift)
参数含义:
参数一:img,输入图像
参数二:center,椭圆心坐标
参数三:axes,椭圆长轴短轴半径
参数四:angle,椭圆旋转的角度
参数五:startAngle,椭圆弧起始角度
参数六:endAngle,椭圆弧终止角度
参数七:color,绘制直线的颜色
参数八:thickness,直线宽度。若为负值,表示填充
参数九:lineType,边界的类型,可取值为FILLED ,LINE_4 ,LINE_8 和LINE_AA
参数十:shift,点坐标中的小数位数
示例:
fun renderEllipse(mat: Mat, imageView: ImageView) {
val size = Size(100.0, 80.0)
val center = Point(mat.width() - 200.0, mat.height() - 160.0)
Imgproc.ellipse(
mat,
center,
size,
360.0,
0.0,
360.0,
scalar,
6,
Imgproc.LINE_AA,
0
)
showImage(mat, imageView)
}
绘制文字
API:
public static void putText(Mat img, String text, Point org, int fontFace, double fontScale, Scalar color, int thickness, int lineType, boolean bottomLeftOrigin)
参数含义:
参数一:img,输入图像
参数二:text,文字内容
参数三:org,文本字符串的左下角位置
参数四:fontFace,字体类型,可取值 FONT_HERSHEY_SIMPLEX = 0, FONT_HERSHEY_PLAIN = 1, FONT_HERSHEY_DUPLEX = 2, FONT_HERSHEY_COMPLEX = 3, FONT_HERSHEY_TRIPLEX = 4, FONT_HERSHEY_COMPLEX_SMALL = 5, FONT_HERSHEY_SCRIPT_SIMPLEX = 6, FONT_HERSHEY_SCRIPT_COMPLEX = 7, FONT_ITALIC = 16
参数五:fontScale,字体大小
参数七:color,绘制直线的颜色
参数八:thickness,直线宽度
参数九:lineType,边界的类型,可取值为FILLED ,LINE_4 ,LINE_8 和LINE_AA
参数十:bottomLeftOrigin,如果为true,则图像数据原点位于左下角。否则,位于左上角
注意:绘制中文,先转bitmap,再绘制中文
示例:
fun renderText(mat: Mat, imageView: ImageView){
val center = Point(mat.width() / 2.0, mat.height() / 2.0)
Imgproc.putText(
mat,
"Hello",
center,
FONT_HERSHEY_TRIPLEX,
2.8,
scalar,
10
)
showImage(mat, imageView)
}