gpt4 book ai didi

c# - Winforms 中的简单相机捕获

转载 作者:行者123 更新时间:2023-11-30 15:54:14 24 4
gpt4 key购买 nike

我只想在 WinForms C# 应用程序中预览然后从设备相机(网络摄像头)捕获快照。

我用过这个:WebEye WebCameraControl ,但它似乎在某些机器/相机上失败了。描述暗示那里有更多负载,但我在 NuGet 上找不到任何适用于 WinForms 的内容。

有什么建议吗?我觉得我错过了一些明显的东西,比如一个内置的 Windows 控件就可以做到这一点!


编辑:
在尝试添加 OpenCVSharp 时,这就是我得到的: enter image description here

最佳答案

尝试 OpenCVSharp .一些带有 PictureBox 和 Button 的代码片段:

VideoCapture capture;
Mat frame;
Bitmap image;
private Thread camera;
bool isCameraRunning = 0;

private void CaptureCamera() {
camera = new Thread(new ThreadStart(CaptureCameraCallback));
camera.Start();
}

private void CaptureCameraCallback() {

frame = new Mat();
capture = new VideoCapture(0);
capture.Open(0);

if (capture.IsOpened()) {
while (isCameraRunning) {

capture.Read(frame);
image = BitmapConverter.ToBitmap(frame);
if (pictureBox1.Image != null) {
pictureBox1.Image.Dispose();
}
pictureBox1.Image = image;
}
}
}

private void button1_Click(object sender, EventArgs e) {
if (button1.Text.Equals("Start")) {
CaptureCamera();
button1.Text = "Stop";
isCameraRunning = true;
}
else {
capture.Release();
button1.Text = "Start";
isCameraRunning = false;
}
}

完整代码

 public partial class Form1 : Form
{
// Create class-level accesible variables
VideoCapture capture;
Mat frame;
Bitmap image;
private Thread camera;
bool isCameraRunning = false;

// Declare required methods
private void CaptureCamera()
{
camera = new Thread(new ThreadStart(CaptureCameraCallback));
camera.Start();
}

private void CaptureCameraCallback()
{
frame = new Mat();
capture = new VideoCapture(0);
capture.Open(0);

if (capture.IsOpened())
{
while (isCameraRunning)
{
capture.Read(frame);
image = BitmapConverter.ToBitmap(frame);
if (pictureBox1.Image != null)
{
pictureBox1.Image.Dispose();
}

pictureBox1.Image = image;
}
}
}

public Form1()
{
InitializeComponent();
CaptureCamera();
button1.Text = "Stop";
isCameraRunning = true;
}

private void button1_Click(object sender, EventArgs e)
{
if (button1.Text.Equals("Start"))
{
CaptureCamera();
button1.Text = "Stop";
isCameraRunning = true;
}
else
{
capture.Release();
button1.Text = "Start";
isCameraRunning = false;
}
}

protected override void OnClosed(EventArgs e)
{
base.OnClosed(e);
try
{
capture.Release();
camera.Abort();
}
catch (Exception ex)
{
}
}

private void button2_Click(object sender, EventArgs e)
{
if (isCameraRunning)
{
Bitmap snapshot = new Bitmap(pictureBox1.Image);


snapshot.Save(string.Format(@"D:\image.jpg", Guid.NewGuid()), ImageFormat.Jpeg);
capture.Release();
camera.Abort();
this.Close();
}
else
{
Console.WriteLine("Cannot take picture if the camera isn't capturing image!");
}
}

private void Form1_Load_1(object sender, EventArgs e)
{
}
}

enter image description here

这里SaveButton 保存图片到D:\location如果您觉得有任何错误,请尝试以管理员身份运行

您可以在这里找到解决方案:- working example

关于c# - Winforms 中的简单相机捕获,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50812961/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com