前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android OpenCV(四):绘制几何图形

Android OpenCV(四):绘制几何图形

作者头像
Vaccae
发布2020-12-07 11:10:04
8730
发布2020-12-07 11:10:04
举报
文章被收录于专栏:微卡智享微卡智享

绘制几何图形

  • 直线
  • 矩形
  • 多边形
  • 圆形
  • 椭圆
  • 文字

绘制直线

API

代码语言:javascript
复制
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,点坐标中的小数位数

操作

代码语言:javascript
复制
private fun renderLine(source: Mat) {
    val start = Point(0.0, source.height().toDouble())
    val end = Point(source.width().toDouble(), 0.0)
    Imgproc.line(source, start, end, mFillColor, 10, Imgproc.LINE_AA, 0)
    showMat(source)
}

结果

对角线

绘制矩形

API

代码语言:javascript
复制
public static void rectangle(Mat img, Point pt1, Point pt2, Scalar color, int thickness, int lineType, int shift) 
  • 参数一:img,输入图像
  • 参数二:pt1,z
  • 参数三:pt2,终点
  • 参数四:color,绘制直线的颜色
  • 参数五:thickness,直线宽度。若为负值,表示填充
  • 参数六:lineType,边界的类型,可取值为FILLED ,LINE_4 ,LINE_8 和LINE_AA
  • 参数七:shift,点坐标中的小数位数

操作

代码语言:javascript
复制
private fun renderRectangle(source: Mat) {
    val leftTop = Point(10.0, 10.0)
    val rightBottom = Point(120.0, 120.0)
    Imgproc.rectangle(source, leftTop, rightBottom, mFillColor, 10)
    showMat(source)
}

结果

矩形

填充矩形

绘制多边形

API

代码语言:javascript
复制
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,点坐标中的小数位数

操作

代码语言:javascript
复制
private fun renderPoly(source: Mat) {
    Imgproc.polylines(
        source,
        listOf(
            MatOfPoint(Point(10.0, 10.0), Point(200.0, 20.0), Point(10.0, 240.0), Point(80.0, 120.0))
        ),
        true,
        mFillColor,
        4,
        Imgproc.LINE_AA,
        0
    )
    showMat(source)
}

结果

多边形

绘制圆形

API

代码语言:javascript
复制
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,点坐标中的小数位数

操作

代码语言:javascript
复制
private fun renderCircle(source: Mat) {
    val center = Point(source.width() / 2.0, source.height() / 2.0)
    val radius = 120
    Imgproc.circle(source, center, radius, mFillColor, 20, Imgproc.LINE_AA)
    showMat(source)
}

结果

圆形

实心圆

绘制椭圆

API

代码语言:javascript
复制
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,点坐标中的小数位数

操作

代码语言:javascript
复制
private fun renderEllipse(source: Mat) {
    val size = Size(100.0, 80.0)
    val center = Point(source.width() - 200.0, source.height() - 160.0)
    Imgproc.ellipse(
        source,
        center,
        size,
        360.0,
        0.0,
        360.0,
        mFillColor,
        6,
        Imgproc.LINE_AA,
        0
    )
    showMat(source)
}

结果

椭圆

实心椭圆

绘制文字

API

代码语言:javascript
复制
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,字体类型,可取值

参数五:fontScale,字体大小

参数七:color,绘制直线的颜色

参数八:thickness,直线宽度

参数九:lineType,边界的类型,可取值为FILLED ,LINE_4 ,LINE_8 和LINE_AA

参数十:bottomLeftOrigin,如果为true,则图像数据原点位于左下角。否则,位于左上角

操作

代码语言:javascript
复制
private fun renderText(source: Mat) {
    val center = Point(source.width() / 2.0, source.height() / 2.0)
    Imgproc.putText(
        source,
        "Hello",
        center,
        Imgproc.FONT_HERSHEY_TRIPLEX,
        2.8,
        mFillColor,
        10
    )
    showMat(source)
}

结果

文字

中文处理

绘制文字时若传入中文会出现乱码,如下传入"文字"二字,得到如下结果。英文putText方法只支持ascii中的一个很小的子集,而不是unicode或者是utf字符。

中文乱码

解决办法:转为Bitmap再绘制文字

中文汉字

源码

https://github.com/onlyloveyd/LearningAndroidOpenCV

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-12-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 微卡智享 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 绘制几何图形
  • 绘制直线
    • API
      • 操作
        • 结果
        • 绘制矩形
          • API
            • 操作
              • 结果
              • 绘制多边形
                • API
                  • 操作
                    • 结果
                    • 绘制圆形
                      • API
                        • 操作
                          • 结果
                          • 绘制椭圆
                            • API
                              • 操作
                                • 结果
                                • 绘制文字
                                  • API
                                    • 操作
                                      • 结果
                                      • 中文处理
                                      • 源码
                                      领券
                                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档