前言

OpenCV是一个基于Apache2.0许可(开源)发行的跨平台计算机视觉和机器学习软件库,它具有C++,Python,Java和MATLAB接口,并支持Windows,Linux,Android和Mac OS。 Emgu CV是OpenCV图像处理库的跨平台 .Net 包装器。允许从 .NET 兼容语言调用OpenCV函数。但是网上目前关于在Mac OS上使用EmguCV的教程较少,而我后续推出的OpenVINO C# API项目将支持Mac OS系统,为了大家后续能够使用,特出一期教程来演示一下Mac OS上使用EmguCV。

1. 项目环境

  • 编码环境:Visual Studio Code
  • 程序框架:.NET 6.0

  目前在Mac OS上使用C#语言官方提供了编译Visual Studio for Mac,但是根据官方发布的通知后续将不再支持该软件更新,后续将全部转移到Visual Studio Code平台,所以在此处我们演示使用Visual Studio Code进行演示。而代码的运行与配置使用dotnet指令实现。

  关于Visual Studio Code以及.NET的安装方式可以参考一下官方教程:

在 macOS 上安装 .NET、Visual Studio Code on macOS。

2. 创建控制台项目

  此处使用dotnet指令创建新项目,在Visual Studio Code的终端中输入一下指令:

dotnet new console --framework net6.0 --use-program-main -o test_emgucv

  如下图所示,在终端中输入以下指令后,会自动创建新的项目以及项目文件夹。

  在创建好项目后,我们进行一下项目测试,依次输入以下指令,最后输出如下图所示:

cd test_emgucv
dotnet run

3. 添加 Nuget Package 程序包

  Emgu CV是一个可以跨平台使用的程序包,并且官方也提供了编译好的程序包,用户可以根据自己的平台进行安装。在Mac OS上,主要需要安装一下两个包,分别是Emgu.CV的官方程序包以及Emgu.CV的运行依赖包。

dotnet add package Emgu.CV
dotnet add package Emgu.CV.runtime.mini.macos

  安装完上面两个安装包后,项目的配置的文件中会增加下面两个配置。

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net6.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup> <ItemGroup>
<PackageReference Include="Emgu.CV" Version="4.8.1.5350" />
<PackageReference Include="Emgu.CV.runtime.mini.macos" Version="4.8.1.5350" />
</ItemGroup> </Project>

  接下来运行dotnet run,检验项目中是否包含所需要的配置文件:Emgu.CV.dll、runtimes/osx/native/libcvextern.dylib。打开项目运行生成的文件夹bin/{build_config}/{dotnet_version}/,在本项目中是bin/Debug/net6.0/文件夹,如下图所示:

  通过该图可以看出,在本项目中只有Emgu.CV.dll文件,并没有runtimes/osx/native/libcvextern.dylib文件,因该文件需要我们自行配置。首先是需要找到该文件,该文件主要是在Emgu.CV.runtime.mini.macos程序包中,如下图所示:

  接下来就是创建runtimes/osx/native/文件夹,然后将该文件放在该文件夹下即可。如下图所示:

3. 测试应用

  最后我们编写项目代码进行测试,如下面代码所示:

using System;
using Emgu.CV;
using Emgu.Util;
using Emgu.CV.Structure;
using Emgu.CV.CvEnum;
namespace test_emgucv
{
internal class Program
{
static void Main(string[] args)
{
Mat image = CvInvoke.Imread("image.jpg");
Mat image2=new Mat();
if (!image.IsEmpty)
{
Console.WriteLine("srcImg is OK!");
}
Console.WriteLine("图像的宽度是:{0}",image.Rows);
Console.WriteLine("图像的高度是:{0}", image.Cols);
Console.WriteLine("图像的通道数是:{0}", image.NumberOfChannels);
CvInvoke.Imshow("src", image);
CvInvoke.CvtColor(image, image2, ColorConversion.Bgr2Gray);//转为灰度图像
CvInvoke.Imshow("src1", image2);
CvInvoke.WaitKey(0);
CvInvoke.DestroyAllWindows();//销毁所有窗口
}
}
}

  项目代码运行后,最后呈现效果如下图所示:

4. 总结

  在本次项目中,我们成功实现了在Mac OS上使用EmguCV,并成功配置了EmguCV依赖库,实现了在.NET 6.0环境下使用C#语言调用EmguCV库,实现的图片数据的读取以及图像色彩转换,并进行了图像展示。

【OpenCV】在 Mac OS 上使用 EmguCV的更多相关文章

  1. 在 Mac OS 上使用 TypeScript 编写 ASP.NET Core 1.0 应用

    var appInsights=window.appInsights||function(config){ function r(config){t[config]=function(){var i= ...

  2. 在 Mac OS 上创建并运行 ASP.NET Core 1.0 网站

    var appInsights=window.appInsights||function(config){ function r(config){t[config]=function(){var i= ...

  3. 如何将NTFS格式的移动硬盘挂接到Mac OS上进行读写(Read/Write)操作

    现在硬盘便宜,很多同学都有移动硬盘,如果你同时使用Windows与Mac OS的话,移动硬盘最好不要使用NTFS文件系统,否则在Mac OS上,你只能读你的移动硬盘,不能写. 但是实际上的情况是,移动 ...

  4. Mac OS 上设置 JAVA_HOME

    Mac OS 上设置 JAVA_HOME 原文链接:http://han.guokai.blog.163.com/blog/static/136718271201301183938165/ 由于需要, ...

  5. 在 Mac OS 上编译 FFmpeg

    本文转自:在 Mac OS 上编译 FFmpeg | www.samirchen.com 安装 Xcode 和 Command Line Tools 从 App Store 上安装 Xcode,并确保 ...

  6. 转-在Mac OS上搭建Python的开发环境

    在Mac OS上搭建Python的开发环境   本文转载自:http://www.jb51.net/article/76931.htm 一. 安装python mac系统其实自带了一个python的执 ...

  7. 在 Mac OS 上编译 OBS

    本文转自:在 Mac OS 上编译 OBS | www.samirchen.com 安装环境 第一步,做准备工作,安装编译 OBS 所需要的环境,流程如下: // 给当前用户添加 /usr/local ...

  8. 在Mac OS上安装Vagrant和Docker的教程

    转载于:http://www.itxuexiwang.com/a/shujukujishu/redis/2016/0216/128.html?1455808640 当听到很多人在说Docker是多么多 ...

  9. 在Mac OS上搭建本地服务器

    我们在做网络编程的时候一般是需要有网络环境的,这样可以边写边测试达到很高的效率.但有些时候我们由于很多原因我们的电脑无法连接到网络,这时就会感觉很不自在,所以今天在这里教大家怎么用自己电脑作服务器. ...

  10. 【Xamarin 在Mac OS 上的部署安装环境】

    ******************没用Mac 的机子,也只能靠虚拟机了**********1 安装VMware 10 从网上下载即可2 下载MAC OS 10.9.5的安装镜像,网上有很多,最好使用 ...

随机推荐

  1. 文心一言 VS 讯飞星火 VS chatgpt (96)-- 算法导论9.3 1题

    一.用go语言,在算法 SELECT 中,输人元素被分为每组 5 个元素.如果它们被分为每组 7个元素,该算法仍然会是线性时间吗?证明:如果分成每组 3 个元素,SELECT 的运行时间不是线性的. ...

  2. 「coci 2021-2022 #1」Logičari

    link. 断环后把断的边所连的两个点特殊标记,作为两个特殊点.这样就是一个树,树的做法很简单吧,把两个特殊点特殊处理带进状态即可. 具体一点就是,设 \(f(x,c_x,c_f,c_{rt_1},c ...

  3. 小札 Combinatorics & Inclusion-Exclusion Principle 1

    「codeforces - 340E」Iahub and Permutations link. 把 \(1,\dots,n\) 中剩下没被固定的数的数量记作 \(s\),再把这其中不担心有会填到自己身 ...

  4. Record - Nov. 21st, 2020 - Exam. REC & SOL

    Craft Prob. 1 Desc. & Link. 有想法. printf( "nan" ); Prob.2 Desc. & Link. 没读懂 Prob. 3 ...

  5. 每日一题:vue3自定义指令大全(呕心沥血所作,附可运行项目源码)

    1.VUE常用指令大全 本项目所有指令均为全局注册,使用时直接在组件中使用即可. 指令目录:src/directives 页面目录:src/views 具体可查看源码 1.1 权限指令 封装一个权限指 ...

  6. JAVA中三种I/O框架——BIO、NIO、AIO

    一.BIO(Blocking I/O) BIO,同步阻塞IO模型,应用程序发起系统调用后会一直等待数据的请求,直至内核从磁盘获取到数据并拷贝到用户空间: 在一般的场景中,多线程模型下的BIO是成本较低 ...

  7. 痞子衡嵌入式:MCUBootUtility v5.3发布,利用XMCD轻松使能外部RAM

    -- 痞子衡维护的 NXP-MCUBootUtility 工具距离上一个大版本(v5.0.0)发布过去4个多月了,期间痞子衡也做过三个小版本更新,但不足以单独介绍.这一次痞子衡为大家带来了全新重要版本 ...

  8. Django——后台添加的用户密码错误

    django项目中,当我们创建了user模型类,并生成了超级管理员,之后我们进入到admin后台页面中,添加一个用户,再去login页面登陆时,会提示我们 用户名或密码错误. 这时,我们第一时间会想到 ...

  9. Spring扩展接口(2):BeanDefinitionRegistryPostProcessor

    在此系列文章中,我总结了Spring几乎所有的扩展接口,以及各个扩展点的使用场景.并整理出一个bean在spring中从被加载到最终初始化的所有可扩展点的顺序调用图.这样,我们也可以看到bean是如何 ...

  10. SQL-报错注入

    updatexml报错注入 updatexml (XML_document, XPath_string, new_value): 第一个参数:XML_document是String格式,为XML文档对 ...