在VScode使用C#并且调用opencv库

我来带你一步步在 VS Code 里搭建出和图中一样的 C# 开发环境,并能成功运行代码。


一、准备工作:安装必备软件

1. 安装 .NET SDK

C# 代码运行需要 .NET SDK,这是微软官方的开发工具包:

  1. 前往官网下载:

    .NET SDK

  2. 选择你系统对应的版本(Windows/macOS/Linux),推荐下载 长期支持(LTS) 版本。

  3. 安装完成后,打开 VS Code 的终端(Ctrl+ 快捷键),输入以下命令验证安装:

    sh 复制代码
    dotnet --version

    如果能输出版本号,说明安装成功。

2. 安装 VS Code 扩展

打开 VS Code,在扩展市场(左侧方块图标)安装这两个扩展:

  • C# Dev Kit(微软官方的 C# 开发工具,包含语法高亮、调试、自动补全)
  • C#(OmniSharp 提供的语言支持,通常会和 C# Dev Kit 一起安装)

二、创建和运行第一个 C# 项目(和图中结构完全一致)

1. 创建项目文件夹

  1. 在电脑上新建一个文件夹,比如 OpenCVIntro(和图中的项目名一致)。
  2. 用 VS Code 打开这个文件夹:文件 → 打开文件夹

2. 在终端创建控制台项目

在 VS Code 终端中,输入以下命令创建一个控制台应用:

sh 复制代码
dotnet new console

执行后,VS Code 的文件资源管理器里会自动生成这些文件,和图中的结构完全对应:

  • Program.cs:你的主代码文件(图中打开的文件)
  • OpenCVIntro.csproj:项目配置文件(和图中文件名一致)
  • bin/obj/ 文件夹:编译生成的文件(和图中显示的一样)

3. 编写和运行代码

  1. 打开 Program.cs,把默认代码改成你图中的版本:

    csharp 复制代码
    using System;
    
    namespace ourNamespace
    {
        class Program
        {
            static void Main(string[] args)
            {
                Console.WriteLine("Hello, World!");
            }
        }
    }
  2. 点击 VS Code 顶部的 运行 → 启动调试(或按 F5),或在终端输入:

    sh 复制代码
    dotnet run

    3.如果想使用插件直接安装 需要下载Code Runner插件 详见https://zhuanlan.zhihu.com/p/576402546

终端会输出 Hello, World!,说明代码成功运行了 ✅


三、常见问题和补充说明

  • 为什么我的文件结构和图里不一样?

    新版 .NET 6+ 的 dotnet new console 默认是顶级语句写法(没有 namespace 和 class),如果你想和图里的旧版结构完全一致,可以在创建项目时指定旧模板:

    sh 复制代码
    dotnet new console -lang C# -f net5.0

    或者直接手动把代码改成图中的写法即可。

  • 调试怎么配置?

    第一次按 F5 运行时,VS Code 会自动生成 .vscode/launch.json.vscode/tasks.json 文件,不需要手动配置,直接就能调试。


四、后续拓展(如果你要做 OpenCV)

你图里的项目名是 OpenCVIntro,如果要在 C# 里用 OpenCV,可以通过 NuGet 安装包:

  1. 在终端输入:

    sh 复制代码
    dotnet add package OpenCvSharp4
    dotnet add package OpenCvSharp4.runtime.win
  2. 之后就可以在代码里引用 OpenCV 命名空间,写图像处理代码了。


一句话:这是给你的 C# 项目安装「Emgu CV」NuGet 包,让你能在 C# 里直接用 OpenCV(图像处理/计算机视觉)功能。

我拆开讲清楚:


1. dotnet add package 是什么?

这是 .NET 命令行工具(CLI)的命令:

sh 复制代码
dotnet add package 包名

作用:

  • 给**当前目录下的 C# 项目(.csproj)**添加一个外部库(NuGet 包)引用

  • 自动修改 .csproj,加上:

    xml 复制代码
    <PackageReference Include="Emgu.CV" Version="xxx" />
  • 自动下载并安装这个库到项目里

简单说:就是在命令行里装库,等同于 VS 里右键"管理 NuGet 包"→安装。


2. Emgu.CV 是什么?

  • OpenCV:最著名的开源图像处理/计算机视觉库,底层是 C++ 写的
  • Emgu CV :把 OpenCV 封装成 .NET 库(C# 可用),叫「.NET wrapper」

有了它,你在 C# 里可以直接写:

csharp 复制代码
using Emgu.CV;
using Emgu.CV.CvInvoke;

Mat img = CvInvoke.Imread("test.jpg");
CvInvoke.Imshow("window", img);

就能读图片、显示、人脸识别、边缘检测、摄像头处理......全部 OpenCV 功能。


3. 为什么你要执行这个命令?

因为你项目叫 OpenCVIntro,就是要做 C# + OpenCV 入门

只装 Emgu.CV 还不够(它只是"包装层"),Windows 下必须再装运行时

sh 复制代码
dotnet add package Emgu.CV.runtime.windows

否则会报"找不到 opencv 原生 dll"。


4. 总结(最简单理解)

  • dotnet add package安装 C# 库
  • Emgu.CVC# 版 OpenCV(图像处理/视觉)
  • 你执行它 = 给项目装上 OpenCV 能力

一句话:dotnet add package Emgu.CV.runtime.windows 是 Windows 专用的「原生运行时」包,专门带 OpenCV 的 .dll 文件;没有它,你的 C# 程序一用 Emgu.CV 就直接崩溃。

下面拆开讲,保证你彻底明白:


1. 先分清楚两个包

你装了两个东西:

1)Emgu.CV(核心托管库)

  • 是 C# 能看懂的「包装层」
  • 提供 using Emgu.CV;MatCvInvoke.Imread 这些类和方法
  • 但它本身不包含 OpenCV 底层代码(没有 .dll)

2)Emgu.CV.runtime.windows(Windows 原生运行时)

  • 里面是编译好的 OpenCV C++ 原生 DLL(x86/x64)
  • 比如:opencv_world480.dllcvextern.dll
  • 专门给 Windows 用,Linux/macOS 要装别的 runtime 包

2. 为什么必须装这个?(最关键)

Emgu.CV 工作原理:

C# 代码(Emgu.CV 托管层)

↓调用

OpenCV C++ 代码(在 .dll 里)

  • 只装 Emgu.CV → 只有"说明书",没有"干活的工人"
  • 运行时会直接报: 无法加载 DLL"opencv_worldxxx.dll"

    Emgu.CV.CvInvoke 的类型初始值设定项引发异常

  • 装了 runtime.windowsNuGet 自动把所有 OpenCV 原生 DLL 复制到输出目录,程序才能真正跑起来

3. 这条命令的意思

sh 复制代码
dotnet add package Emgu.CV.runtime.windows
  • dotnet add package:给当前项目安装 NuGet 包
  • Emgu.CV.runtime.windowsWindows 平台的 Emgu CV 原生运行时包

等价于:

我要在 Windows 上用 Emgu CV,请把所有必需的 OpenCV DLL 都装好。


4. 总结(超级精简版)

  • Emgu.CV = C# 接口(让你能写代码)
  • Emgu.CV.runtime.windows = Windows 版 OpenCV 底层 DLL(让代码能跑)
  • 缺一不可,否则运行报错、崩溃

要不要我给你一段最小示例代码,你直接复制就能测试图片读取+显示,确认两个包都装对了?

相关推荐
xiaoshuaishuai84 小时前
C# 多线程之间对比
java·开发语言·c#
Aaswk10 小时前
Java项目:文件批量处理工具
java·开发语言·vscode·idea
艺杯羹11 小时前
Claude Code 实现 Computer Use:让 AI 操控你的 Windows 电脑(MCP 平替方案)
vscode·ai·ai编程·模型·claude code
z落落12 小时前
C# 多接口实现、重名成员、显式实现、接口继承+抽象类和接口区别
java·开发语言·c#
咸鱼翻身小阿橙12 小时前
高斯模糊降噪/磨皮算法降噪图像
前端·opencv·算法·webpack·c#
Song_da_da_1 天前
C#与VisionPro联合编程实战:机器视觉二次开发完整指南
开发语言·microsoft·c#
加号31 天前
【C#】 Web API 自定义配置函数请求路径:从路由本质到灵活架构设计
开发语言·c#
嵌入式老牛1 天前
液晶段码(米/日字格)识别—倾斜校正
opencv·算法·仿射变换
happyprince1 天前
11-Hugging Face Transformers 分布式与并行系统深度分析
分布式·c#·wpf