android opencv之旅(三)灰化和阈值化处理
2018-06-22 本文已影响111人
风少侠
我们知道了灰度图像比彩色图像包含的信息量要小很多,所以很多情况下我们可以把图像灰化以后再处理,可以减小计算量。
灰化
Mat dst = new Mat();
Imgproc.cvtColor(temp, dst, Imgproc.COLOR_BGR2GRAY);
cvtColor函数是opencv中的图片色彩转换的函数,最后一个参数代表转换类型,BGR、BGRA、GRAY等之间的相互转换。
阈值化
阈值化也可以称为二值化,把每个像素值都和一个预定的阈值比较,再根据结果调整像素值。
Imgproc.threshold(src, dst, thresh, maxval, type);
参数列表:
- src:源Mat,一般传入一个单通道的灰度图像的Mat。
- dst:目标Mat,二值化后要写入的Mat。
- thresh:自定义的阈值。
- maxval:最大值,符合条件的像素将值调整为该值。
- type:二值化的几种类型。
什么才是符合条件?
首先说一下二值化的几种模式:
type | 说明 |
---|---|
THRESH_BINARY | 超过thresh的像素点值被设置为maxval,反之设为0 |
THRESH_BINARY_INV | 超过thresh的像素点值被设置为0,反之设为maxval |
THRESH_TRUNC | 超过thresh的像素点值被设置为thresh,反之不变 |
THRESH_TOZERO | 超过thresh的像素点值不变,反之设为0 |
THRESH_TOZERO_INV | 超过thresh的像素点值设为0,反之不变 |
THRESH_MASK | |
THRESH_OTSU | 使用otsu算法选取一个最优的阈值,配合前五种type使用 |
THRESH_TRIANGLE | 使用triangle算法选取一个最优的阈值,配合前五种type使用 |
示例代码:
Mat dst = new Mat();
Imgproc.threshold(src, dst, 60, 255, Imgproc.THRESH_BINARY);
这段代码的意思就是将原灰度图中色值大于60的点的色值变成255,小于60的点变成0,使得图片呈明显的黑白化。
二值化.gif