.net - vb.net从视频中检测字符并提取到图像

标签 .net vb.net opencv emgucv detection

例:

文件名:test.mp4
文件持续时间:46min

程序将在0分钟至46分钟(逐帧)开始扫描
如果视频上有字幕或文字,请捕获该帧并将其提取为图像

不是OCR,只是捕捉和提取图像

有人告诉我我可以通过opencv或emgucv做到
但是我不知道该怎么做..所以,你们能给我教程吗?

原始图像
enter image description here

提取后的图像
enter image description here

最佳答案

您可以只在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;

关于.net - vb.net从视频中检测字符并提取到图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61249294/

相关文章:

.net - 序列化问题 : Different namespaces (. NET)

c# - 捕捉零行已更新

vb.net - 在 vb.net 中查找列表值的所有组合(笛卡尔积)

c# - 来自主项目的引用命名空间

c++ - at() 和 row().col() 之间的区别

.net - 在 VB6 或经典 ASP 中使用 .NET

c# - 如何使鼠标卡住 c#

c# - .Net 中奇怪的 WndProc 错误。更具体地说是 VB.Net

python - Opencv:仅在捕获图像时由零组成的Numpy数组

vb.net - 错误:基于opencv的应用程序开发