将图像转换为黑白(不是灰度)

时间:2015-11-24 17:53:52

标签: c# image-processing xamarin xamarin.android xamarin.forms

有没有办法在Xamarin.Forms或Xamarin.Android中对图像进行阈值处理?

我想在Android中使用相机拍摄每张照片(一次一张),目前我正在使用xlabs进行相机拍摄。

我搜索过,但我没有找到任何帮助。也许你们可以帮助我。 :)

1 个答案:

答案 0 :(得分:2)

为此,您可以使用OpenCV Library for Android

  1. 下载from here(例如)版本3.0.0
  2. 现在您需要将Android Java Binding Library添加到您的Xamarin.Android项目中(您也可以阅读此great article
  3. Android Java绑定库 添加到您的项目中时,您需要添加.jar,它是通过{ OpenCV SDK 生成的{3}}(但我已经为你做了这个,这里是生成的.jar的documentation)。
  4. Android Java绑定库 - >中文件夹( Jars )添加现有文件(来自第3步的.jar),您还需要将共享对象添加到Jar文件夹(来自YourPathWhereIsStoreSDK / OpenCV-android-) SDK / SDK /本地/库/ armeabi ...等)。
    结果必须与此类似:
    link
  5. 现在,在您的Xamarin.Android项目中,您必须引用 Android Java Binding Library 项目。
  6. 请参阅下面的代码,如何使用此库:)。
  7. 在您的启动活动(或MainActivity)中添加以下内容:

       //beware,that we need to INIT Only once,so better to put in SplashActivity
        public  MainActivity()
                {
                    if (!OpenCVLoader.InitDebug())
                    {
                        System.Console.WriteLine("Failed to INIT \n OpenCV Failure");
                    }
                    else
                    {
                        System.Console.WriteLine("OpenCV INIT Succes");
                    }
    
                }  
    

    现在我们可以将图像转换为黑白:

    void ConvertImageToBW()
        {
            Mat MatToBW = new Mat();
            using (Bitmap SourceImg = Bitmap.CreateBitmap(BitmapFactory.DecodeFile(App._file.Path)))  //App._file.Path  - path of image that we have made by camera 
            {
                if (SourceImg != null)
                {
                    Utils.BitmapToMat(SourceImg,MatToBW);
                    //first we convert to grayscale
                    Imgproc.CvtColor(MatToBW, MatToBW, Imgproc.ColorRgb2gray);
                    //now converting to b/w
                    Imgproc.Threshold(MatToBW, MatToBW, 0.5 * 255, 255, Imgproc.ThreshBinary);
                    using(Bitmap newBitmap = Bitmap.CreateBitmap(MatToBW.Cols(),MatToBW.Rows(),Bitmap.Config.Argb8888))
                    {
                        Utils.MatToBitmap(MatToBW, newBitmap);
                        //put result in your imageView, B/W Image
                        imageView.SetImageBitmap(newBitmap);
                    }
                }
    
            }
        }
    

    现在只需将此方法用于OnActivityResult即可 享受!