書里的解釋:
其他的沒找到什么資料,直接參考百度百科
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方法處理:
