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类中的常用运算静态方法
- 位运算
- 按位非(处理一张图片)
val 目标mat = Utils.loadResource(this, R.drawable.ic_launcher_background) val 处理结果Mat = Mat() Core.bitwise_not(目标mat, 处理结果Mat)
- 按位与(对两张图片处理运算,高宽必须一致)
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)
- 按位或(对两张图片处理运算,高宽必须一致)
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)
- 按位异或(对两张图片处理运算,高宽必须一致)
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图像处理类的常用方法
- 颜色转换
- 概念扫盲:图像彩色模式
- 位图模式:只有黑白两种像素,叫黑白图。相当于只有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)
- 参数-目标mat:Mat:
- 参数-处理结果Mat:Mat:
- 参数-code:Int:源码中有上百种类型的定义(通过Imgproc.COLOR_RGB2BGR点进入看源码就能看到)。一般就是色彩模式2色彩模式的名字定义模式,如下面的:
Imgproc.COLOR_RGB2GRAY:RGB转灰度 - 返回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)
- 参数-目标mat:Mat:
- 参数-处理结果Mat:Mat:
- 参数-thresh:Double:阈值
- 参数-maxval:Double:高于阈值的值设置为多少
- 参数-type:Int:阈值类型
自动阈值,高斯滤波阈值 Imgproc.adaptiveThreshold()
网友评论