使用EmguCV在C#中闪烁/飞行的视频馈送

使用EmguCV在C#中闪烁/飞行的视频馈送,c#,video-streaming,emgucv,C#,Video Streaming,Emgucv,我正在创建一个程序,可以从无人机比赛的视频源中转储单个帧。我遇到了一个问题,从无线视频流来的无人机是闪烁和飞行各地 我正在使用以下代码捕获视频流: Capture _capture; Emgu.CV.Image<Emgu.CV.Structure.Bgr,byte> frame; void StartCamera() { _capture = null; _capture = new Capture((int)nudCamera.Value); _capt

我正在创建一个程序,可以从无人机比赛的视频源中转储单个帧。我遇到了一个问题,从无线视频流来的无人机是闪烁和飞行各地

我正在使用以下代码捕获视频流:

Capture _capture;
Emgu.CV.Image<Emgu.CV.Structure.Bgr,byte> frame;

void StartCamera()
{
    _capture = null;
    _capture = new Capture((int)nudCamera.Value);
    _capture.SetCaptureProperty(Emgu.CV.CvEnum.CAP_PROP.CV_CAP_PROP_FPS, FrameRate);
    _capture.SetCaptureProperty(Emgu.CV.CvEnum.CAP_PROP.CV_CAP_PROP_FRAME_HEIGHT, FrameHeight);
    _capture.SetCaptureProperty(Emgu.CV.CvEnum.CAP_PROP.CV_CAP_PROP_FRAME_WIDTH, FrameWidth);
    webcam_frm_cnt = 0;
    cam = 1;
    Video_seek = 0;
    System.Windows.Forms.Application.Idle += ProcessFrame;
}

private void ProcessFrame(object sender, EventArgs arg)
{
    try
    {
        Framesno = _capture.GetCaptureProperty(Emgu.CV.CvEnum.CAP_PROP.CV_CAP_PROP_POS_FRAMES);
        frame = _capture.QueryFrame();
        if (frame != null)
        {
            pictureBox1.Image = frame.ToBitmap();
            if (cam == 0)
            {
                Video_seek = (int)(Framesno);
                double time_index = _capture.GetCaptureProperty(Emgu.CV.CvEnum.CAP_PROP.CV_CAP_PROP_POS_MSEC);
                //Time_Label.Text = "Time: " + TimeSpan.FromMilliseconds(time_index).ToString().Substring(0, 8);
                double framenumber = _capture.GetCaptureProperty(Emgu.CV.CvEnum.CAP_PROP.CV_CAP_PROP_POS_FRAMES);
                //Frame_lbl.Text = "Frame: " + framenumber.ToString();
                Thread.Sleep((int)(1000.0 / FrameRate));
            }
            if (cam == 1)
            {
                //Frame_lbl.Text = "Frame: " + (webcam_frm_cnt++).ToString();
            }
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message.ToString());
    }
}
Capture\u Capture;
Emgu.CV.图像框;
void StartCamera()
{
_捕获=空;
_捕获=新捕获((int)nudCamera.Value);
_capture.SetCaptureProperty(Emgu.CV.CvEnum.CAP_PROP.CV_CAP_PROP_FPS,帧速率);
_capture.SetCaptureProperty(Emgu.CV.CvEnum.CAP_PROP.CV_CAP_PROP_FRAME_HEIGHT,FrameHeight);
_capture.SetCaptureProperty(Emgu.CV.CvEnum.CAP_PROP.CV_CAP_PROP_FRAME_WIDTH,FrameWidth);
网络摄像头frm cnt=0;
凸轮=1;
视频搜索=0;
System.Windows.Forms.Application.Idle+=ProcessFrame;
}
私有void ProcessFrame(对象发送方、事件args arg)
{
尝试
{
Framesno=\u capture.GetCaptureProperty(Emgu.CV.CvEnum.CAP\u PROP.CV\u CAP\u PROP\u POS\u FRAMES);
frame=_capture.QueryFrame();
如果(帧!=null)
{
pictureBox1.Image=frame.ToBitmap();
如果(凸轮==0)
{
视频搜索=(整数)(帧编号);
双时间索引=\u capture.GetCaptureProperty(Emgu.CV.CvEnum.CAP\u PROP.CV\u CAP\u PROP\u POS\MSEC);
//Time_Label.Text=“Time:+TimeSpan.fromMillimes(Time_index).ToString().Substring(0,8);
double framenumber=\u capture.GetCaptureProperty(Emgu.CV.CvEnum.CAP\u PROP.CV\u CAP\u PROP\u POS\u FRAMES);
//Frame_lbl.Text=“Frame:+framenumber.ToString();
睡眠((int)(1000.0/帧速率));
}
如果(凸轮==1)
{
//Frame\u lbl.Text=“Frame:”+(网络摄像头\u frm\u cnt++)。ToString();
}
}
}
捕获(例外情况除外)
{
Show(例如Message.ToString());
}
}
有没有我错过的场景? 这种视频流闪烁似乎也发生在其他程序中,但当您摆弄视频设置(NTSC/PAL设置)时,它会自行修复

编辑:所以我需要能够将视频流置于NTSC/M模式,这在EmguCV中是否可行?如果是,我该怎么做

编辑2:我读过的所有文档都指向完全不可能更改视频类型,并且没有关于此主题的文档。我希望被证明是错的:)

感谢高级

这将告诉您如何设置视频模式。

您知道任何C#来源吗?这对我来说只是胡言乱语:\