實現圖像的二值化(java+opencv)


書里的解釋:

 

 

其他的沒找到什么資料,直接參考百度百科

https://baike.baidu.com/item/%E5%9B%BE%E5%83%8F%E4%BA%8C%E5%80%BC%E5%8C%96/1748870?fr=aladdin#2

具體是先實現灰度化,然后實現二值化。

里面提到了opencv里的兩個接口

1.Imgproc.threshold(Mat src, Mat dst, double thresh, double maxval, int type)

參數:
src 原圖
dst 輸入圖像
thresh 當前閾值
maxval 最大閾值一般為255
type 閾值類型

2.Imgproc.adaptiveThreshold(Mat src, Mat dst, double maxValue, int adaptiveMethod, int thresholdType, int blockSize, double C)

參數:
src 要二值化的灰度圖
dst 二值化后的圖
maxValue 二值化后要設置的那個值
adaptiveMethod 塊計算的方法
thresholdType 二值化類型
blockSize 塊大小(奇數,大於1)
C 差值(負值也可以)

實現代碼如下:

package part;
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;
//二值化
public class Threshold {

        public static void main(String[] args) {
            System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
            // 加載時灰度
            Mat src = Imgcodecs.imread("./data/yasuo.png", Imgcodecs.IMREAD_GRAYSCALE);
            // 保存灰度
            Imgcodecs.imwrite("./data/yasuo_1.png", src);
            Mat target = new Mat();
            // 二值化處理
            Imgproc.threshold(src, target, 0, 255, Imgproc.THRESH_BINARY | Imgproc.THRESH_OTSU);//灰度圖像二值化
            // 保存二值化后圖片
            Imgcodecs.imwrite("./data/yasuo_2.png", target);
            Imgproc.adaptiveThreshold(src, target, 255, Imgproc.ADAPTIVE_THRESH_MEAN_C, Imgproc.THRESH_BINARY, 5, 0);
            // 保存二值化后圖片
            Imgcodecs.imwrite("./data/yasuo_3.png", target);
        }

    }

這里兩個接口的效果都進行了測試:

原圖

原圖

 

threshold方法處理:

 

 

adaptiveThreshold方法處理:

 

 

 
 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM