OpenCVSharp4の二値化を試す(単純二値化、大津の二値化、適応的二値化)

方法

  1. VisualStudioにNuGetでOpenCVSharp4とOpenCVSharp4.runtime.winをインストールする
  2. 次のプログラムを実行する
using System;  
using OpenCvSharp;  

namespace 二値化 {  
    class Program {  
        static void Main(string[] args) {  
            //入力画像を読み込みグレースケール化する  
            Mat src = new Mat(@"D:\picture.png");  
            Cv2.CvtColor(src, src, ColorConversionCodes.RGB2GRAY);  

            //出力用のMat  
            Mat binary = new Mat(), binearyInv = new Mat(), otsu = new Mat() , adaptiveMean = new Mat(), adaptiveGaussian = new Mat();  

            //最大値の定義  
            double maxVal =255;  


            //単純二値化は、閾値を決めておく必要がある。  
            double thresh = 127;   
            Cv2.Threshold(src, binary    , thresh, maxVal, ThresholdTypes.Binary);  
            Cv2.Threshold(src, binearyInv, thresh, maxVal, ThresholdTypes.BinaryInv);  
            Cv2.Threshold(src, otsu      ,      0, maxVal, ThresholdTypes.Otsu);  


            //適応的二値化は、ブロックサイズと重み付けから差し引く定数を決めておく必要がある  
            int blocksize = 7, c = 3;  
            Cv2.AdaptiveThreshold(src, adaptiveMean    , maxVal, AdaptiveThresholdTypes.MeanC    , ThresholdTypes.Binary, blocksize, c);  
            Cv2.AdaptiveThreshold(src, adaptiveGaussian, maxVal, AdaptiveThresholdTypes.GaussianC, ThresholdTypes.Binary, blocksize, c);  


            //画像の表示  
            Cv2.ImShow("src"              , src);  
            Cv2.ImShow("bineary"          , binary);  
            Cv2.ImShow("bineary inv"      , binearyInv);  
            Cv2.ImShow("otsu"             , otsu);  
            Cv2.ImShow("adaptive mean"    , adaptiveMean);  
            Cv2.ImShow("adaptive gaussian", adaptiveGaussian);  

            Cv2.WaitKey();  
        }  
    }  
}  

参考

https://docs.opencv.org/4.0.0/d7/d1b/group__imgproc__misc.html#gaa9e58d2860d4afa658ef70a9b1115576

http://labs.eecs.tottori-u.ac.jp/sd/Member/oyamada/OpenCV/html/py_tutorials/py_imgproc/py_thresholding/py_thresholding.html