Xamarin EmguCv v4.2

Сап, пишу диплом на тему мобилок на Xamarin VisualStudio2019, никогда раньше с мобильной разработкой не сталкивался, C# также совсем недавно начал учить, столкнулся со следующей проблемой: в Windows.Form спокойно подключаю пакет EmguCV и определяю контура фигур на рисунке, но мне по условию нужно сделать мобилку для определения бланка с тестами, так что для начала решил перенести с вин-формы на Xamarin.Form, но тут столкнулся со множеством сложностей, т.к.: для использования преобразования из Image в Image в десктопе использовал .Bitmap на версии Emgu 4.1, на версии 4.2 такое преобразование уже не работает, но в Xamarin просто не устанавливается пакет Emgu ниже 4.2, т.е. просто никак не могу сначала преобразовать с помощью .Bitmap полученное с камеры изображение, а затем снова его преобразовать обратно и вывести на экран.

У меня есть по отдельности десктопная апча для распознания фигур и мобильная апча для вывода фото на экран (оба кода не мои, нашёл на просторах интернета), но объединить их Я никак не могу

Windows.Form:

using System;
using System.Windows.Forms;

using Emgu.CV;
using Emgu.CV.Structure;
using Emgu.CV.Util;

namespace ShapeRecognision
{
    public partial class Form1 : Form
    {
        private Image<Bgr, byte> inputImage = null;

        public Form1()
        {
            InitializeComponent();
        }

        private void открытьToolStripMenuItem_Click(object sender, EventArgs e)
        {
            DialogResult res = openFileDialog1.ShowDialog();
            if (res == DialogResult.OK)
            {
                inputImage = new Image<Bgr, byte>(openFileDialog1.FileName);
                pictureBox1.Image = inputImage.Bitmap;
            }
            else
                MessageBox.Show("hey");
        }

        private void найтиФигурыToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Image<Gray, byte> grayImage = inputImage.SmoothGaussian(5).Convert<Gray, byte>().ThresholdBinaryInv(new Gray(230), new Gray(255));
            VectorOfVectorOfPoint contours = new VectorOfVectorOfPoint();
            Mat hierarchy = new Mat();

            CvInvoke.FindContours(grayImage, contours, hierarchy, Emgu.CV.CvEnum.RetrType.External, Emgu.CV.CvEnum.ChainApproxMethod.ChainApproxSimple);

            for (int i = 0; i < contours.Size; i++)
            {
                double perimeter = CvInvoke.ArcLength(contours[i], true);
                VectorOfPoint approximation = new VectorOfPoint();
                CvInvoke.ApproxPolyDP(contours[i], approximation, 0.04 * perimeter, true);
                CvInvoke.DrawContours(inputImage, contours, i, new MCvScalar(0, 0, 255), 2);

                pictureBox2.Image = inputImage.Bitmap;
            }
        }
    }
}

Xamarin.Forms:

using Plugin.Media;
using Plugin.Media.Abstractions;
using System;
using Xamarin.Forms;

namespace CameraApp
{
    public partial class MainPage : ContentPage
    {
        public MainPage()
        {
            //InitializeComponent();
            Button takePhotoBtn = new Button { Text = "Сделать фото" };
            Button getPhotoBtn = new Button { Text = "Выбрать фото" };
            Image img = new Image();

            // выбор фото
            getPhotoBtn.Clicked += async (o, e) =>
            {
                if (CrossMedia.Current.IsPickPhotoSupported)
                {
                    MediaFile photo = await CrossMedia.Current.PickPhotoAsync();
                    img.Source = ImageSource.FromFile(photo.Path);
                }
            };

            // съемка фото
            takePhotoBtn.Clicked += async (o, e) =>
            {
                if (CrossMedia.Current.IsCameraAvailable && CrossMedia.Current.IsTakePhotoSupported)
                {
                    MediaFile file = await CrossMedia.Current.TakePhotoAsync(new StoreCameraMediaOptions
                    {
                        SaveToAlbum = true,
                        Directory = "Sample",
                        Name = $"{DateTime.Now.ToString("dd.MM.yyyy_hh.mm.ss")}.jpg"
                    });

                    if (file == null)
                        return;

                    img.Source = ImageSource.FromFile(file.Path);
                }
            };
            Content = new StackLayout
            {
                HorizontalOptions = LayoutOptions.Center,
                Children = {
                    new StackLayout
                    {
                         Children = {takePhotoBtn, getPhotoBtn},
                         Orientation =StackOrientation.Horizontal,
                         HorizontalOptions = LayoutOptions.CenterAndExpand
                    },
                    img
                }
            };
        }
    }
}

хелпаниет плез, а то уже с ума начинаю сходить от того, что просто нигде не могу найти подходящую инфу. Может, мне и не стоит для этого вовсе юзать Emgu, а какой-нить другой способ, про который Я не в курсе


Ответы (0 шт):