0

私は次のコードを持っています。これはビデオをキャプチャし、jpgを非常に高速に更新します。

必要なのは、これを変更してx秒ごとに1つのフレームをキャプチャすることです。これにより、バーコードのデコードなど、他の処理を実行できます。

using AForge.Video;
using AForge.Video.DirectShow;

namespace BAMSystem
{
public partial class WebForm1 : System.Web.UI.Page
{
    public int FrameRate { get; set; }

    private FilterInfoCollection VideoCaptureDevices;
    private VideoCaptureDevice FinalVideo;

    protected void Page_Load(object sender, EventArgs e)
    {
        inputDevices.Items.Clear();

        VideoCaptureDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice);
        foreach (FilterInfo VideoCaptureDevice in VideoCaptureDevices)
        {
            inputDevices.Items.Add(VideoCaptureDevice.Name);
        }
        inputDevices.SelectedIndex = 0;

        FinalVideo = new VideoCaptureDevice(VideoCaptureDevices[inputDevices.SelectedIndex].MonikerString);
        FinalVideo.NewFrame += new NewFrameEventHandler(FinalVideo_NewFrame);

    }

    public void Start_OnClick(object sender, EventArgs e)
    {
                FinalVideo.Start();
    }

    void FinalVideo_NewFrame(object sender, NewFrameEventArgs eventArgs)
    {
                Bitmap video = (Bitmap)eventArgs.Frame.Clone();
                video.Save("C:\\Users\\Wayneio\\Desktop\\image\\live.jpg");
    }
    public void Stop_OnClick(object sender, EventArgs e)
    {
        if (FinalVideo.IsRunning)
        {
            FinalVideo.SignalToStop();
            FinalVideo.Stop();
        }
    }
4

2 に答える 2

0

まず、videoCaptureDevice.desiredFrameRateを1に設定します。これにより、NewFrameEventHandlerが1秒に1回実行されるようになります。次に、NewFrameEventHandlerにnumの後に何かを実行させます。必要な秒数(スキップまたはフレーム)。

于 2012-11-05T10:21:27.433 に答える
0

カメラがフレームレートの設定をサポートしていない場合。グローバル変数を使用して、その値が true の場合にのみ実行できます。これは、Visual Studio の単純なタイマー イベントで実行できます。

void FinalVideo_NewFrame(object sender, NewFrameEventArgs eventArgs)
   { if(mytimedevent) {
                    Bitmap video = (Bitmap)eventArgs.Frame.Clone();
                    video.Save("C:\\Users\\Wayneio\\Desktop\\image\\live.jpg");
                    }
     mytimedevent!=mytimedevent  // or set it simply to false.
    }

また、他の計算に基づいて mytimedevent の値を変更することもできます。それが終了したら true に設定し、実行中は false に設定します。

于 2012-11-28T23:19:57.243 に答える