我有一个小项目,我从网络摄像头捕获图像并解码QR。
以下代码捕获图像并将其存储到本地文件中,仅当它不在while循环时。系统。图似乎使捕获的图像只有黑色。如果我不使用它(循环),它将捕获太多图像。
因此,是否有一种方法可以更改Aforge.video framerate,以便我可以每x秒捕获图像,而无需循环?
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;
}
public void Start_OnClick(object sender, EventArgs e)
{
FinalVideo = new VideoCaptureDevice(VideoCaptureDevices[inputDevices.SelectedIndex].MonikerString);
FinalVideo.NewFrame += new NewFrameEventHandler(FinalVideo_NewFrame);
FinalVideo.Start();
}
void FinalVideo_NewFrame(object sender, NewFrameEventArgs eventArgs)
{
int i = 0;
while (i < 10)
{
Bitmap video = (Bitmap)eventArgs.Frame.Clone();
video.Save("C:\Users\Wayneio\Desktop\image\test" + i + ".jpg");
i++;
System.Threading.Thread.Sleep(5000);
}
}
public void Stop_OnClick(object sender, EventArgs e)
{
this.FinalVideo.Stop();
}
}
此外,我在尝试通过ASP按钮停止捕获时会遇到此错误:
Object reference not set to an instance of an object on this.FinalVideo.Stop();
尝试了这一点: ((videocapturedevice)finalVideo).DesiredFramerate = 10;
在代码启动视频之前,将FRAMREATE设置为
FinalVideo.DesiredFrameRate = 10;
FinalVideo.Start();
跳过您保存的另一个选项是使用并非总是正确的函数如果您有全球计数器值mycounter
做一个模量小组,如IX Mycounter下方的含量为10等于1
myCounter++
if (m(ycounter %% 10))==1) { //code to save your bitmap }