gpt4 book ai didi

c# - 如何在EMGU CV 3.1上拍摄相机的屏幕截图?

转载 作者:行者123 更新时间:2023-12-02 17:42:02 28 4
gpt4 key购买 nike

我正在EMGU CV上做一个非常简单的程序,因此我需要对我的相机正在录制的内容进行截图并将其保存在特定的文件夹中,以下是我的相机捕获代码:

        ImageViewer viewer = new ImageViewer(); 
VideoCapture capture = new VideoCapture();
Application.Idle += new EventHandler(delegate (object sender, EventArgs e)
{
viewer.Image = capture.QueryFrame();
});
viewer.ShowDialog();

I apologize for the simple terms, I still really noob in programming.

最佳答案

似乎您刚刚从EmguCV Wiki发布了标准代码。但是,让我尝试解释一下如何在计算机上显示网络摄像头的视频供稿,并在按下按钮时保存屏幕截图(您必须自己创建所有UI元素)。您将需要一个带有PictureBox元素的表单来显示图像,以及一个用于保存快照的按钮。

我将通过注释解释代码中的所有内容,并使用标准EmguCV代码进行工作:

private Capture capture;
private bool takeSnapshot = false;

public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
// Make sure we only initialize webcam capture if the capture element is still null
if (capture == null)
{
try
{
// Start grabbing data, change the number if you want to use another camera
capture = new Capture(0);
}
catch (NullReferenceException excpt)
{
// No camera has been found
MessageBox.Show(excpt.Message);
}
}

// This makes sure the image will be fitted into your picturebox
originalImageContainer.SizeMode = PictureBoxSizeMode.StretchImage;

// When the capture is initialized, start processing the images in the PorcessFrame method
if (capture != null)
Application.Idle += ProcessFrame;
}

// You registered this method, so whenever the application is Idle, this method will be called.
// This allows you to process a new frame during that time.
private void ProcessFrame(object sender, EventArgs arg)
{
// Get the newest webcam frame
Image<Bgr, double> capturedImage = capture.QueryFrame();
// Show it in your PictureBox. If you don't want to convert to Bitmap you should use an ImageBox (which is an EmguCV element)
originalImageContainer.Image = capturedImage.ToBitmap();

// If the button was clicked indicating you want a snapshot, save the image
if(takeSnapshot)
{
// Save the image
capturedImage.Save(@"C:\your\picture\path\image.jpg");
// Set the bool to false again to make sure we only take one snapshot
takeSnapshot = !takeSnapshot;
}
}

//When clicking the save button
private void SaveButton_Click(object sender, EventArgs e)
{
// Set the bool to true, so that on the next frame processing the frame will be saved
takeSnapshot = !takeSnapshot;
}

希望这对您有所帮助。让我知道还有什么不清楚的地方!

关于c# - 如何在EMGU CV 3.1上拍摄相机的屏幕截图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43288335/

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