【OpenCV】在MacOS上使用OpenCvSharp
前言
OpenCV是一个基于Apache2.0许可(开源)发行的跨平台计算机视觉和机器学习软件库,它具有C++,Python,Java和MATLAB接口,并支持Windows,Linux,Android和Mac OS。OpenCvSharp是一个OpenCV的 .Net wrapper,应用最新的OpenCV库开发,使用习惯比EmguCV更接近原始的OpenCV,该库采用LGPL发行,对商业应用友好。
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_opencvsharp
如下图所示,在终端中输入以下指令后,会自动创建新的项目以及项目文件夹。
在创建好项目后,我们进行一下项目测试,依次输入以下指令,最后会得到输出:"Hello, World!":
test_opencvsharp
dotnet run
3. 添加 Nuget Package 程序包
OpenCvSharp4是一个可以跨平台使用的程序包,并且官方也提供了编译好的程序包,用户可以根据自己的平台进行安装。在Mac OS上,主要需要安装一下两个包,分别是OpenCvSharp4的官方程序包以及OpenCvSharp4的运行依赖包。
dotnet add package OpenCvSharp4
dotnet add package OpenCvSharp4.runtime.osx_arm64 --prerelease
安装完上面两个安装包后,项目的配置的文件中会增加下面两个配置。
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net6.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="OpenCvSharp4" Version="4.8.0.20230708" />
<PackageReference Include="OpenCvSharp4.runtime.osx_arm64" Version="4.8.1-rc" />
</ItemGroup>
</Project>
emsp; 接下来运行dotnet run
,检验项目中是否包含所需要的配置文件:OpenCvSharp.dll
、runtimes/osx-arm64/native/
。打开项目运行生成的文件夹bin/{build_config}/{dotnet_version}/
,在本项目中是bin/Debug/net6.0/
文件夹,如下图所示:
可以看出,在程序运行后,安装的程序包中所有项目都已经加载到当前项目中,如果出现缺失,就需要找到程序包位置,将该文件复制到指定路径。
3. 测试应用
最后我们编写项目代码进行测试,如下面代码所示:
using System;
using OpenCvSharp;
namespace test_opencvsharp
{
internal class Program
{
static void Main(string[] args)
{
Mat image = Cv2.ImRead("image.jpg");
Mat image2=new Mat();
if (image!=null)
{
Console.WriteLine("srcImg is OK!");
}
Console.WriteLine("图像的宽度是:{0}",image.Rows);
Console.WriteLine("图像的高度是:{0}", image.Cols);
Console.WriteLine("图像的通道数是:{0}", image.Channels());
Cv2.ImShow("src", image);
Cv2.CvtColor(image, image2, ColorConversionCodes.RGB2GRAY);//转为灰度图像
Cv2.ImShow("src1", image2);
Cv2.WaitKey(0);
Cv2.DestroyAllWindows();//销毁所有窗口
}
}
}
项目代码运行后,最后呈现效果如下图所示:
4. 总结
在本次项目中,我们成功实现了在Mac OS上使用OpenCvSharp,并成功配置了OpenCvSharp依赖库,实现了在.NET 6.0环境下使用C#语言调用OpenCvSharp库,实现的图片数据的读取以及图像色彩转换,并进行了图像展示。
【OpenCV】在MacOS上使用OpenCvSharp的更多相关文章
- TODO:macOS上ThinkPHP5和Semantic-UI集成
TODO:macOS上ThinkPHP5和Semantic-UI集成 1. 全局安装 (on OSX via homebrew)Composer 是 homebrew-php 项目的一部分 2. 把X ...
- CoreCRM 开发实录——Travis-CI 实现 .NET Core 程度在 macOS 上的构建和测试 [无水干货]
上一篇文章我提到:为了使用"国货",我把 Linux 上的构建和测试委托给了 DaoCloud,而 Travis-CI 不能放着不用啊.还好,这货支持 macOS 系统.所以就把 ...
- docker4dotnet #3 在macOS上使用Visual Studio Code和Docker开发asp.net core和mysql应用
.net猿遇到了小鲸鱼,觉得越来越兴奋.本来.net猿只是在透过家里那田子窗看外面的世界,但是看着海峡对岸的苹果园越来越茂盛,实在不想再去做一只宅猿了.于是,.net猿决定搭上小鲸鱼的渡轮到苹果园去看 ...
- ASP.NET Core 中文文档 第二章 指南(1)用 Visual Studio Code 在 macOS 上创建首个 ASP.NET Core 应用程序
原文:Your First ASP.NET Core Application on a Mac Using Visual Studio Code 作者:Daniel Roth.Steve Smith ...
- 用 Python 和 OpenCV 检测图片上的条形码
用 Python 和 OpenCV 检测图片上的的条形码 这篇博文的目的是应用计算机视觉和图像处理技术,展示一个条形码检测的基本实现.我所实现的算法本质上基于StackOverflow 上的这个问 ...
- 在 MacOS 上编译链接 OpenGL 程序
几个星期以前开始折腾在我的MBA上写 OpenGL 小程序.我不太熟悉MacOS上的开发工具比如XCode,所以一开始的想法就是用vim来写程序,然后手工编译链接.网上查了一下,MacOS上的Open ...
- 在MacOs上配置Hadoop和Spark环境
在MacOs上配置hadoop和spark环境 Setting up Hadoop with Spark on MacOs Instructions 准备环境 如果没有brew,先google怎样安装 ...
- OpenCV在ARM上的移植
OpenCV在ARM上的移植 与X86 Linux类似,请参考:Linux 下编译安装OpenCV 本文在此基础上进行进一步操作. 网络上很多移植编译的方法比较老,多数针对OpenCV 1.0,而且方 ...
- OpenCV在矩阵上的卷积
转载请注明出处!!!http://blog.csdn.net/zhonghuan1992 OpenCV在矩阵上的卷积 在openCV官网上说是戴面具,事实上就是又一次计算一下矩阵中的每个value,那 ...
- OpenCV在C#中应用—OpenCVSharp
1.什么是OpenCVSharp 之前一直是基于OpenCV开发视觉算法,但C++语言对于GUI的开发相对于C#来说确实很不方便,之前就了解到C#下使用OpenCV可以使用EmguCV,这段时间 ...
随机推荐
- App性能指标(安装、冷启动、卸载、平均内存/cpu/fps/net)测试记录
[需求背景] 需要针对产品以及竞品做出横向对比,输出对应的比对测试报告,供产研进行产品性能优化依据 [测试方案] 对于主流的厂商和系统版本进行多维度的横向对比 厂商:华为系.小米系.蓝绿系.三星系.苹 ...
- Solution -「YunoOI 2016」镜中的昆虫
Description Link. 区间推平: 区间数颜色. Solution 考虑无修的情况,我们是采用维护每个数的 \(pre\) 来做的.具体一点就是对于每一个 \(a_{i}\) 维护 \(p ...
- 一个 println 竟然比 volatile 还好使?
前两天一个小伙伴突然找我求助,说准备换个坑,最近在系统复习多线程知识,但遇到了一个刷新认知的问题-- 小伙伴:Effective JAVA 里的并发章节里,有一段关于可见性的描述.下面这段代码会出现死 ...
- php反序列化--[SWPUCTF 2021 新生赛]no_wakeup
打开网站发现这个,点击 ??? 就看到了代码: 发现是PHP反序列化, 但和一般的PHP反序列化不同的是,多了一个_wakeup函数,然后就去网上搜了一下, 发现是一个cve漏洞CVE-2016-7 ...
- linux 查找命令(whatis,free,df,top)
whatis whatis命令是用于查询一个命令执行什么功能,并将查询结果打印到终端上,等同于 man -f: # whatis grep grep (1) - print lines matchin ...
- Ubuntu上解决快捷键与idea快捷键冲突
Ubuntu上解决快捷键与idea快捷键冲突 一.ubuntu 本身系统导致,需要修改 ubuntu 快捷键 解决方案: 设置 按钮→系统设置→硬件选项区域中的"键盘"→切换到&q ...
- 虹科干货|Redis企业版数据库为企业「数据安全」叠加最强Buff!
"这是一场可预见的噩梦!" 近期,黑客通过攻击亚洲最大两家数据中心-万国数据和新科电信媒体,获取国际巨头企业的登录凭证,引发了2000多家企业史诗级数据泄露.中国作为全球第二大托管 ...
- PXE批量网络装机
PXE高效批量网络装机 系统装机的三种引导方式 1.硬盘 2.光驱(u盘) 3.网络启动 pxe 系统安装过程 加载boot loader Boot Loader 是在操作系统内核运行之前运行的一段小 ...
- Java系列:Java8 新特性:强大的 Stream API(创建 Stream、中间操作、终止操作)
Java8中有两大最为重要的改变.第一个是 Lambda 表达式:另外一个则是 Stream API. Stream API ( java.util.stream) 把真正的函数式编程风格引入到Jav ...
- 题解 SP13015
题目描述: 给定初始序列 \(A\),然后对原序列有以下操作: 操作 \(1\): 0 l r v 将区间 \([l,r]\) 全赋值为 \(v\). 操作 \(2\):1 l r 查询区间 \([l ...