Emgucv を使用してビデオ ファイルからフレームをキャプチャしています。これが私のコードです。
private void Frame(object sender, EventArgs arg)
{
try
{
timesbetweenframes++;
Image<Bgr, Byte> frame = FrameExtractor.QueryFrame();
if (timesbetweenframes == 10 || timesbetweenframes == 0)
{
if (frame != null)
{
Bgr min = new Bgr(65, 65, 65);
Bgr threshold = new Bgr(128, 128, 128);
Image<Bgr, Byte> Frame2 = frame;
//Noise Removal
frame._SmoothGaussian(5);
VideoBox.Image = Frame2;
Bgr drawColor = new Bgr(Color.Blue);
using (Image<Gray, byte> gray = frame.Convert<Gray, Byte>())
{
TextExtract.Recognize(gray);
Tesseract.Charactor[] charactors = TextExtract.GetCharactors();
foreach (Tesseract.Charactor c in charactors)
{
Frame2.Draw(c.Region, drawColor, 1);
}
}
cptrdImage.Image = frame;
String text = TextExtract.GetText();
//removal of noise in this section
Tags.Items.Add(text);
WriteData(text, fileName,frame);
fileName++;
}
else
{
MessageBox.Show("Done!");
FrameExtractor = null;
InProgress = false;
timer1.Elapsed -= Frame;
}
timesbetweenframes = 0;
}
}
フレーム関数がタイマー イベントに追加されています。これにより、500 ミリ秒ごとにフレーム関数が自動的に起動され、10 フレームごとに抽出されます。問題は、queryframe() 関数を呼び出した後、次のエラーでプログラムがクラッシュすることです。 0x7777f7a99 は 0x00000000 のメモリを参照しました。しばらくすると、メモリを読み取れませんでした。
私はそれを間違った方法で使用していますか、またはこのエラーを発生させずにこれを行う他の方法はありますか?