博客摘录「 c# WPF 读取摄像头的方法」2024年7月19日

在XAML文件中,添加一个Image控件用于显示摄像头的视频流:

<Window x:Class="CameraApp.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Camera App" Height="450" Width="800">
    <Grid>
        <Image x:Name="cameraImage" />
    </Grid>
</Window>
 

在需要的.xaml.cs文件中,添加以下代码:

using System;
using System.Windows;
using OpenCvSharp;
using OpenCvSharp.Extensions;

namespace CameraApp
{
    public partial class MainWindow : Window
    {
        private VideoCapture capture;
        private bool isCapturing;

        public MainWindow()
        {
            InitializeComponent();
        }

        private void StartCapture()
        {
            capture = new VideoCapture(0); // 0表示默认摄像头,如果有多个摄像头可以尝试不同的索引
            isCapturing = true;

            // 启动一个线程来循环读取摄像头的视频流
            new System.Threading.Thread(() =>
            {
                while (isCapturing)
                {
                    using (Mat frame = new Mat())
                    {
                        if (capture.Read(frame))
                        {
                            // 将帧转换成WPF的ImageSource格式
                            var imageSource = frame.ToBitmapSource();
                            // 在UI线程上更新Image控件的内容
                            Dispatcher.Invoke(() => cameraImage.Source = imageSource);
                        }
                    }
                }
            }).Start();
        }

        private void StopCapture()
        {
            isCapturing = false;
            capture.Release();
        }

        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            StartCapture();
        }

        private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
        {
            StopCapture();
        }
    }
}
 

StartCapture()方法用于启动读取摄像头的视频流。它首先创建一个VideoCapture对象,指定索引为0表示默认摄像头(如果有多个摄像头,可以尝试不同的索引)。

然后,使用一个循环不断读取摄像头的帧。对于每一帧,将其转换为WPF的ImageSource格式,并在UI线程上更新Image控件的内容。

StopCapture()方法用于停止读取视频流,释放摄像头资源。

在Window_Loaded事件中调用StartCapture()方法启动读取视频流,在Window_Closing事件中调用StopCapture()方法停止读取。

这样,当程序启动时,摄像头的视频流将会在Image控件中显示出来。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值