VB. net Обнаружение символов из видео и извлечение в изображение - PullRequest
2 голосов
/ 16 апреля 2020

пример:

имя файла: test.mp4
продолжительность файла: 46 мин

программа начнет сканирование с 0 до 46 мин (кадр за кадром)
, если есть это субтитр или текст на видео, захватите этот кадр и извлеките его в изображение

НЕ OCR, ПРОСТО Захват и ИЗОБРАЖЕНИЕ ИЗОБРАЖЕНИЯ

кто-то сказал мне, что я могу сделать это с помощью opencv или emgucv
, но я не знаю, как это сделать .. так, вы, ребята, можете дать мне учебник?

оригинальное изображение enter image description here

изображение после извлечения
enter image description here

1 Ответ

0 голосов
/ 16 апреля 2020

Вы можете просто использовать видеопоток в Emgucv и захватить нужный кадр.

private List<Image<Bgr, Byte>> GetVideoFrames(String Filename)
{
        List<Image<Bgr, Byte>> image_array = new List<Image<Bgr, Byte>>();
        Capture _capture = new Capture(Filename);
        double totalFrames = _capture.GetCaptureProperty(Emgu.CV.CvEnum.CAP_PROP.CV_CAP_PROP_FRAME_COUNT);
        double fps = _capture.GetCaptureProperty(Emgu.CV.CvEnum.CAP_PROP.CV_CAP_PROP_FPS);
        double frameNumber = 0.0;

        bool Reading = true;

        while (Reading)
        {
            _capture.SetCaptureProperty(Emgu.CV.CvEnum.CAP_PROP.CV_CAP_PROP_POS_FRAMES, frameNumber);
            Image<Bgr, Byte> frame = _capture.QueryFrame();
            if (frame != null)
            {
                //image_array.Add(frame.Copy());

                //frame.Save(OutFileLocation + "\\" + Guid.NewGuid() + ".jpg");

                frame.Save(OutFileLocation + "\\" + DateTime.Now.ToString("yyyyMMddHHmmssfff") + ".jpg");
            }
            else
            {
                Reading = false;
            }

            frameNumber += (fps * TimeDiff);
        }

        return image_array;
}

Если вы хотите обрезать изображение, чтобы включить только подписи, то вы можете просто использовать roi .

Rectangle rect = new Rectangle(0, 0, frame.Width, frame.Height / 4);
frame.ROI = rect;
...