美文网首页android
android opencv之旅(三)灰化和阈值化处理

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

作者: 风少侠 | 来源:发表于2018-06-22 16:23 被阅读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

    相关文章

      网友评论

        本文标题:android opencv之旅(三)灰化和阈值化处理

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