Не удается неявно преобразовать тип 'Emgu.CV.Image 'to' System.Drawing.Image ' - PullRequest
0 голосов
/ 22 марта 2020

Последняя строка, которая устанавливает свойство picturebox.image, выдает ошибку, ошибка:

Невозможно неявно преобразовать тип 'Emgu.CV.Image' в 'System.Drawing.Image'

Я пытался использовать toBitmap (), но там говорилось, что нет такой вещи, которая принадлежит imageToShow. Любая помощь будет отличной ..

   Image<Bgr, byte> source = new Image<Bgr, byte>(@"C:\\Users\\ereno\\OneDrive\\Masaüstü\\TRButton.png"); 
                    Image<Bgr, byte> template = new Image<Bgr, byte>(@"C:\\Users\\ereno\\OneDrive\\Masaüstü\\Screenshot_2.png"); 
                    Image<Bgr, byte> imageToShow = source.Copy();

                    using (Image<Gray, float> result = source.MatchTemplate(template, Emgu.CV.CvEnum.TemplateMatchingType.CcoeffNormed))
                    {
                        double[] minValues, maxValues;
                        Point[] minLocations, maxLocations;
                        result.MinMax(out minValues, out maxValues, out minLocations, out maxLocations);


                        if (maxValues[0] > 0.9)
                        {

                            Rectangle match = new Rectangle(maxLocations[0], template.Size);
                            imageToShow.Draw(match, new Bgr(Color.Red), 3);
                        }
                    }


                    pictureBox1.Image = imageToShow;

1 Ответ

0 голосов
/ 22 марта 2020

Если вы хотите показать изображение, которое вы прочитали внутри вашего WPF, вы можете использовать источник изображения, который находится в Xaml. Вы должны преобразовать ваш объект изображения в растровое изображение, затем растровое изображение в исходный объект изображения, так как это потребуется для отображения изображения. Эта форма stack подробно описывает, как это сделать.

Сначала преобразуйте объект изображения в растровое изображение.

//Convert the image object to a bitmap
Bitmap img = image.ToBitmap();

//Using the method below, convert the bitmap to an imagesource
imgOutput.Source = ImageSourceFromBitmap(img);

Функция, которую я вызывал выше Это можно сделать с помощью приведенного ниже кода.

//If you get 'dllimport unknown'-, then add 'using System.Runtime.InteropServices;'
[DllImport("gdi32.dll", EntryPoint = "DeleteObject")]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool DeleteObject([In] IntPtr hObject);

public ImageSource ImageSourceFromBitmap(Bitmap bmp)
{
    var handle = bmp.GetHbitmap();
    try
    {
        return Imaging.CreateBitmapSourceFromHBitmap(handle, IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions());
    }
    finally { DeleteObject(handle); }               
}

Вам нужно будет добавить несколько ссылок на ваш проект, но этот метод работал для меня в прошлом.

...