android opencv之旅(三)灰化和阈值化处理

我们知道了灰度图像比彩色图像包含的信息量要小很多,所以很多情况下我们可以把图像灰化以后再处理,可以减小计算量。

灰化

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
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容