【问题标题】:ArgumentException was unhandled; Value does not fall within the expected rangeArgumentException 未处理;值不在预期范围内
【发布时间】:2014-04-12 09:03:02
【问题描述】:

我正在尝试使用“haar cascade”选择和播放视频文件并检测人脸。当我选择一个视频文件时,它在这一行显示异常“ArgumentException was unhandled”
int len = (int)memde.StreamLength;
这是我使用的代码:

private void button1_Click(object sender, EventArgs e)
    {
        OpenFileDialog openFileDialog1 = new OpenFileDialog();
        if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
        {
                memde = new MediaDetClass();
                System.IO.Directory.CreateDirectory("temp");
                int len = (int)memde.StreamLength;
                label1.Text = "Length: " + len.ToString();
                trackBar1.Minimum = 0;
                trackBar1.Maximum = len;
                trackBar1.Value = 0;
                counter = 0;
                Image img;
                memde.Filename = openFileDialog1.FileName;
                memde.CurrentStream = 0;
                float percent = 0.002f;
                Image<Gray, byte> gray;
                for (float i = 0.0f; i < len; i = i + (float)(percent * len))
                {
                    counter++;
                    string fbitname = storagepath + counter.ToString();
                    memde.WriteBitmapBits(i, 850, 480, fbitname + ".bmp");
                    pictureBox1.Image = new Bitmap(fbitname);
                    img = Image.FromFile(fbitname + ".bmp");
                    img.Save(fbitname + ".bmp", ImageFormat.Bmp);
                    System.IO.File.Delete(i + fbitname + ".bmp");
                    Image<Bgr, Byte> image = new Image<Bgr, Byte>(new Bitmap(img));
                    gray = image.Convert<Gray, Byte>();
                    MCvAvgComp[][] facesDetected = gray.DetectHaarCascade(
                 face,
                 1.2,
                 10,
                 Emgu.CV.CvEnum.HAAR_DETECTION_TYPE.DO_CANNY_PRUNING,
                 new Size(20, 20));
                    foreach (MCvAvgComp f in facesDetected[0])
                    {
                        result = image.Copy(f.rect).Convert<Gray, byte>().Resize(100, 100, Emgu.CV.CvEnum.INTER.CV_INTER_CUBIC);
                        image.Draw(f.rect, new Bgr(Color.Red), 2);
                    }
                }
        }
    }

【问题讨论】:

标签: c# asp.net emgucv face-detection


【解决方案1】:

你没有告诉 MediaDetClass 文件名,所以实例不知道它的长度。所以在获取流的长度之前设置 FileName 属性。

memde = new MediaDetClass();
memde.Filename = openFileDialog1.FileName;
memde.CurrentStream = 0;
System.IO.Directory.CreateDirectory("temp");
int len = (int)memde.StreamLength;
label1.Text = "Length: " + len.ToString();
trackBar1.Minimum = 0;
trackBar1.Maximum = len;
trackBar1.Value = 0;
counter = 0;
Image img;
float percent = 0.002f;

【讨论】:

  • 谢谢它的工作..但现在它在 pictureBox1.Image = new Bitmap(fbitname); 行中显示另一个异常“参数无效”我想在图片框中显示每一帧。请帮忙!
  • 你在哪里设置存储路径?
  • 我已经在 button_click namespace face { public partial class Form1 : Form { string storagepath = @"temp\";静态 int 计数器 = 0;图像 结果 = null; HaarCascade 脸; MediaDetClass memde;
  • 所以 fbitname 是 temp\1,看起来不像是您尝试分配的真实位图名称。尝试调试您的代码并检查变量的值
  • 我怎样才能在图片框中显示框架..有什么想法吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-09
  • 1970-01-01
相关资源
最近更新 更多