1. Внешний вид интерфейса
- два
Button
- Один
PictureBox
- Один
BackgroundWorker cameraWorker
2. Реализация функции
2.1 Откройте камеру
- Включи камеру
- Определить, включена ли камера, нет: подсказка и выход
- Фоновые задачи камеры
cameraWorker
начать работу
private void openCameraBtn_Click(object sender, EventArgs e)
{
if (cameraWorker.IsBusy)
{
closeCamera();
}
else
{
openCamera();
}
}
private void openCamera()
{
capture.Open(0, VideoCaptureAPIs.ANY);
if (!capture.IsOpened())
{
Close();
MessageBox.Show("打开摄像头失败");
return;
}
openCameraBtn.Text = "关闭摄像头";
cameraWorker.RunWorkerAsync();
}
private void closeCamera()
{
openCameraBtn.Text = "打开摄像头";
cameraWorker.CancelAsync();
capture.Release();
pictureBox1.Image = null;
}
2.2 Запуск фоновых задач камеры
-
while
бесконечный цикл - получить веб-камеру
frameMat
- преобразовать в
Bitmap
- скопировать в
pictureBox1
private void cameraWorker_DoWork(object sender, DoWorkEventArgs e)
{
var bgWorker = (BackgroundWorker)sender;
while (!bgWorker.CancellationPending)
{
using (var frameMat = capture.RetrieveMat())
{
var frameBitmap = BitmapConverter.ToBitmap(frameMat);
bgWorker.ReportProgress(0, frameBitmap);
}
Thread.Sleep(100);
}
}
private void cameraWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
var frameBitmap = (Bitmap)e.UserState;
pictureBox1.Image?.Dispose();
pictureBox1.Image = frameBitmap;
}
3. Отчет об исключениях
System.TypeInitializationException:““OpenCvSharp.Internal.NativeMethods”的类型初始值设定项引发异常。”
内部异常
DllNotFoundException: 无法加载 DLL“OpenCvSharpExtern”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)。
Потому что dll чуть меньше
- нажмите, чтобы скачатьOpenCVSharp dll.zip
- ставить
\bin\Debug\下面
4. Операция
- идеально
Пять, исходный код демо
Исходный код проекта OpenCVSharpDemo нажмите, чтобы загрузить
Если вы считаете, что это хорошо, просто нажмите три раза (Нравится + Избранное + Подписаться)