在.NET中连接USB网络摄像头的方法如下:
示例代码如下:
using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.Net.Http;
using System.Numerics;
using Microsoft.Extensions.Configuration;
using Microsoft.OpenCV;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace MyProject
{
static class VideoCapture
{
static VideoCapture()
{
using (var capture = new VideoCapture(0))
{
// 设置回调函数
capture.ImageCaptured += new EventHandler<CvAsyncProcessEventArgs>
(async (sender, args) =>
{
var bitmap = new Bitmap(256, 256);
var img = new Image<Bgr, byte>(bitmap.Size);
img.SetResolution(bitmap.HorizontalResolution, bitmap.VerticalResolution);
await Task.Run(() =>
{
using (var mat = ((Image<Gray, byte>)sender).Mat)
{
var res = mat.Width * mat.Height, cols = mat.Width, rows = mat.Height;
for (int j = 0; j< rows; j++)
{
for (int i = 0; i< cols; i++)
{
var idx = j * cols + i;
var rgba = img.Data[i * img.Stride + j * 4];
// var rgba = System.Convert.ToByte(mat.Data[i * mat.Stride + j * 4]);
rgba = rgba.Reverse<byte>().ToArray();
var ptr = rgba.WriteToArray();
img.Data.Slice(2 * idx, 1).WriteToArrayArray(ptr);
}
}
await bitmap.SetPixel(0, 0, Color.FromArgb(ConvertToInt(mat.Data[0]), ConvertToInt(mat.Data[1]), ConvertToInt(mat.Data[2])));
}
var frame = bitmap as Bitmap;
// frame.Save(@"c:\temp\image.png");
frame.Save("test.jpg");
});
// frame.Save($"frame_{DateTime.Now:yyyy-MM-dd HH:mm:ss}.jpg");
});
}
}
}
}
这个范例代码使用OpenCV库,并需要摄像头设备的硬件ID号。在上面的示例中,摄像头ID被设置为0。
通过执行上面的代码实例,摄像头的图像将显示在名为“MyForm”的窗体上。你可以更改“MyForm”为Windows Forms项目中的UI控
领取专属 10元无门槛券
手把手带您无忧上云