Iworb
@Iworb
WEB-разработчик

Как преобразовать Bitmap в IplImage?

Собственно, есть некий Bitmap (с форматом пикселей Format8bppIndexed: после преобразования в Grayscale). Как мне его преобразовать в IplImage (формат изображения OpenCV).
Пробовал так:
public static Bitmap Binaryze(Bitmap inBitmap)
        {
            var g = new GrayscaleY();
            var inGray = g.Apply(inBitmap);
            var inPtr = IntPtr.Zero;
            var bd = inGray.LockBits(new Rectangle(0, 0, inGray.Width, inGray.Height), ImageLockMode.ReadWrite,
                PixelFormat.Format8bppIndexed);
            try
            {
                inPtr = bd.Scan0;
                var b1 = Sauvola.Convert(inPtr, 15, 0.05, 256);
                var b2 = Benrsen.Convert(inPtr, 3, 100);
                inGray.UnlockBits(bd);
                ...
            }
            ...
        }

Внутри, к примеру, Sauvola:
public class Sauvola
    {
        public static Bitmap Convert(IntPtr src, int Size = 31, double K = 0.9, int R = 32)
        {
            var srcImage = new IplImage(src, true);
            var imgSaulova = new IplImage(srcImage.Size, BitDepth.U8, 1); //вот тут ошибка. Очевидно, что srcImage вышел каким-то "не таким"
            Binarizer.SauvolaFast(srcImage, imgSaulova, Size, K, R);
            return imgSaulova.ToBitmap();
        }
    }

Выдает ошибку BadImageFormatException.
Использую AForge, OpenCVSharp.
  • Вопрос задан
  • 4620 просмотров
Решения вопроса 1
@DrReiz
bmp.ToIplImage() //требуется подключение OpenCvSharp.Extensions
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы