vb.net 从视频中检测字符并提取到图像
vb.net character detection from video and extract to image
示例:
文件名:test.mp4
文件时长:46分钟
程序将在 0 分钟到 46 分钟开始扫描(逐帧)
如果视频上有字幕或文本,则捕获该帧并提取到图像
不是 OCR,只是捕获和提取图像
有人告诉我可以用 opencv 或 emgucv
但是我不知道怎么做..所以,你们能给我教程吗?
原图
提取后的图像
您可以只在 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;
示例:
文件名:test.mp4
文件时长:46分钟
程序将在 0 分钟到 46 分钟开始扫描(逐帧)
如果视频上有字幕或文本,则捕获该帧并提取到图像
不是 OCR,只是捕获和提取图像
有人告诉我可以用 opencv 或 emgucv
但是我不知道怎么做..所以,你们能给我教程吗?
原图
提取后的图像
您可以只在 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;