美文网首页
opencv4andorid常用方法

opencv4andorid常用方法

作者: 愿你我皆是黑马 | 来源:发表于2021-09-22 11:09 被阅读0次

    opencv库加载

    if (OpenCVLoader.initDebug()) {
       Log.e("Check", "opencv库加成功")
    } else {
       Log.e("Check", "opencv库加载失败")
    }
    

    Mat类

    概念:表示一个多维(实数|复数向量、矩阵、灰度|彩色图像、立体元素、张量、直方图)的单|多通道数组,包含了图像的各种信息。可以简单理解为是用来保存多维的矩阵。是一个图像矩阵。

    • 释放内存(要求程序自己定义的mat都要在不用的时候释放,防止内存泄露)。
      mat..release()
      

    Utils中提供的Mat/bitmap转换方法

    • Bitmap转Mat:
    // 方式1. Bitmap类转Mat
    fun bitmap2Mat(bitmap: Bitmap): Mat {
       val mat = Mat()
       Utils.bitmapToMat(bitmap, mat)
       return mat
    }
    // 方式2. Utils提供的直接加载Bitmap资源返回Mat的方法
    // 注意:此方法官方建议加上try、catch
    try {
        val mat=Utils.loadResource(this, R.drawable.ic_launcher_background)
    }catch (e:IOException){
        e.printStackTrace()
    }
    
    
    • Mat转Bitmap:
    fun mat2Bitmap(mat: Mat): Bitmap {
       val bitmap = Bitmap.createBitmap(mat.width(), mat.height(), Bitmap.Config.ARGB_8888)
       Utils.matToBitmap(mat, bitmap)
       return bitmap
    }
    

    Core类中的常用运算静态方法

    • 位运算
      1. 按位非(处理一张图片)
      val 目标mat = Utils.loadResource(this, R.drawable.ic_launcher_background)
      val 处理结果Mat = Mat()
      Core.bitwise_not(目标mat, 处理结果Mat)
      
      1. 按位与(对两张图片处理运算,高宽必须一致)
      val 目标mat1 = Utils.loadResource(this, R.drawable.ic_launcher_background)
      val 目标mat2 = Utils.loadResource(this, R.drawable.ic_launcher_background)
      val 处理结果Mat = Mat()
      Core.bitwise_and(目标mat1, 目标mat2, 处理结果Mat)
      
      1. 按位或(对两张图片处理运算,高宽必须一致)
      val 目标mat1 = Utils.loadResource(this, R.drawable.ic_launcher_background)
      val 目标mat2 = Utils.loadResource(this, R.drawable.ic_launcher_background)
      val 处理结果Mat = Mat()
      Core.bitwise_or(目标mat1, 目标mat2,处理结果Mat)
      
      1. 按位异或(对两张图片处理运算,高宽必须一致)
      val 目标mat1 = Utils.loadResource(this, R.drawable.ic_launcher_background)
      val 目标mat2 = Utils.loadResource(this, R.drawable.ic_launcher_background)
      val 处理结果Mat = Mat()
      Core.bitwise_xor(目标mat1, 目标mat2,处理结果Mat)
      
    • 算术运算

    ImgProc图像处理类的常用方法

    • 颜色转换
      1. 概念扫盲:图像彩色模式
        • 位图模式:只有黑白两种像素,叫黑白图。相当于只有0或者1。将彩色图片转成位图模式不能直接转,要先转成灰度模式。
        • 灰度模式:使用单一色调表示图像,有0-255(0黑,255白,0-255黑-灰-白 进行过渡)的256级灰度来表示图像。所以一个色调只占用1个整形(8字节)。
        • RGB模式:日常见到的彩色图片,有3个颜色通道(红绿蓝),每个都需要一个整形(8字节)。每个通道范围为0-255。当三个通道值相等时的像素颜色表现为灰色。
        • HSV模式:根据人类思考惯性定义的一个彩色模型。比较贴合正常人的思维感知。H(色相:指从物体反射或者透过物体传播的颜色)、S(饱和度:颜色的强度或纯度,表示灰色成分所占比例)、V(亮度:指明暗程度,100%为白色,0%为黑色)。 HSV模式各字母含义图片示例

    cvtColor颜色转换方法:Imgproc.cvtColor(目标mat:Mat,处理结果Mat:Mat,code:Int)

    1. 参数-目标mat:Mat:
    2. 参数-处理结果Mat:Mat:
    3. 参数-code:Int:源码中有上百种类型的定义(通过Imgproc.COLOR_RGB2BGR点进入看源码就能看到)。一般就是色彩模式2色彩模式的名字定义模式,如下面的:
      Imgproc.COLOR_RGB2GRAY:RGB转灰度
    4. 返回void,结果存放在第二个参数中。

    代码示例:

    // 1. Bitmap的RGB转灰度
    val 目标mat = Utils.loadResource(this, R.drawable.ic_launcher_background)
    val 处理结果Mat = Mat()
    Core.bitwise_not(目标mat, 处理结果Mat)
    Imgproc.cvtColor(目标mat,处理结果Mat,Imgproc.COLOR_BGR2GRAY)
    目标mat.release()
    

    threshold二值化方法:Imgproc.threshold(目标mat:Mat,处理结果Mat:Mat,thresh:Double,maxval:Double,type:Int)

    1. 参数-目标mat:Mat:
    2. 参数-处理结果Mat:Mat:
    3. 参数-thresh:Double:阈值
    4. 参数-maxval:Double:高于阈值的值设置为多少
    5. 参数-type:Int:阈值类型

    自动阈值,高斯滤波阈值 Imgproc.adaptiveThreshold()

    相关文章

      网友评论

          本文标题:opencv4andorid常用方法

          本文链接:https://www.haomeiwen.com/subject/xanugltx.html