前言

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

  目前在Linux上使用C#语言官方提供了Visual Studio Code平台,所以在此处我们演示使用Visual Studio Code进行演示。而代码的运行与配置使用dotnet指令实现。

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

在 Linux 上安装 .NET:由于Linux系统环境类型较多,所以可以根据官方提供的教程并根据自己的系统安装即可;

Visual Studio Code on Linux:大家可以根据自己的环境进行安装。

2. 创建控制台项目

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

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

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

  在创建好项目后,我们使用vscode打开,输入以下指令,如下图所示:

test_opencvsharp
code .

3. 添加 Nuget Package 程序包

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

dotnet add package OpenCvSharp4
dotnet add package OpenCvSharp4_.runtime.ubuntu.20.04-x64

  依次输入指令后输出如下图所示:



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

<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.9.0.20240103" />
<PackageReference Include="OpenCvSharp4_.runtime.ubuntu.20.04-x64" Version="4.9.0.20240103" />
</ItemGroup> </Project>

  接下来运行dotnet run,检验项目中是否包含所需要的配置文件:OpenCvSharp.dllruntimes/ubuntu.20.04-x64/native/。打开项目运行生成的文件夹bin/{build_config}/{dotnet_version}/,在本项目中是bin/Debug/net6.0/文件夹,如下图所示:

可以看出,在程序运行后,安装的程序包中所有项目都已经加载到当前项目中,如果出现缺失,就需要找到程序包位置,将该文件复制到指定路径。

5. 安装依赖项目

  在上面的测试中,并为使用到安装的OpenCvSharp4,因此运行并未出现其他错误,如果主机电脑之前没有安装使用过OpenCV,所以第一次使用需要配置依赖项目。

  首先第一步检查一下缺少什么依赖项,在终端中输入以下指令:

ldd libOpenCvSharpExtern.so

  如上图所示,经过ldd检测后,发现存在未安装的依赖,接下爱就是安装相应的依赖项,首先是解决tesseract缺少,在终端输入以下指令:

sudo apt install tesseract-ocr

  安装完成后再进行依赖项检测,如下图所示:

  可以看出,经过安装后,该依赖项已经可以检测到,接下来就是安装其他依赖项,依次输入以下指令即可:

sudo apt install libdc1394-dev
sudo apt install libavcodec-dev
sudo apt install libavformat-dev
sudo apt install libswscale-dev
sudo apt install libopenexr-dev

  最后,安装完成后,在进行检测,如下图所示,可以看出,目前已经成功检测到所有依赖项,程序就可以正常使用了。

4. 测试应用

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

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();//销毁所有窗口
}
}
}

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

5. 总结

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

【OpenCV】在Linux上使用OpenCvSharp的更多相关文章

  1. 【Linux开发】OpenCV在ARM-linux上的移植过程遇到的问题4---共享库中嵌套库带路径【已解决】

    [Linux开发]OpenCV在ARM-linux上的移植过程遇到的问题4-共享库中嵌套库带路径[已解决] 标签:[Linux开发] 紧接着上一篇,我居然又尝试了一下编译opencv,主要是因为由于交 ...

  2. 【Linux开发】OpenCV在ARM-linux上的移植过程遇到的问题2---CMAKE配置问题

    实际上这里说的是移植的第一步,下载到源码后,我用的是opencv2.4.9,解压缩,然后可以利用cmake-gui来进行configure配置,这里面需要设置交叉编译的工具链,具体的可以参考[Linu ...

  3. ### OpenCV安装(Linux)

    ### OpenCV安装(Linux) @(gr_self)[ffmpeg | openCV] #@author: gr #@date: 2015-09-02 #@email: forgerui@gm ...

  4. OpenCV在ARM上的移植

    OpenCV在ARM上的移植 与X86 Linux类似,请参考:Linux 下编译安装OpenCV 本文在此基础上进行进一步操作. 网络上很多移植编译的方法比较老,多数针对OpenCV 1.0,而且方 ...

  5. Qt Opencv 在Linux下摄像头简单示例(转)

    下面写的文章也许网上也有类似的,但是大多数都没有给出思路及背景,让初学者每次都只能学到一点皮毛,不少知识需要大量搜索零碎地拼凑起来.题外话,虽然现在是碎片化信息时代,但正是这样信息整合能力也显得非常重 ...

  6. OpenCV在ARM-linux上的移植过程遇到的问题3---共享库中嵌套库居然带路径【未解决】

    [Linux开发]OpenCV在ARM-linux上的移植过程遇到的问题3-共享库中嵌套库居然带路径[未解决] 标签(空格分隔): [Linux开发] 移植opencv到tq2440 一.下载open ...

  7. 如何利用mono把.net windows service程序迁移到linux上

    How to migrate a .NET Windows Service application to Linux using mono? 写在最前:之所以用要把windows程序迁移到Linux上 ...

  8. Linux上运行NET

    今天尝试了下Ubuntu上运行NET程序,按照 https://github.com/aspnet/Home 的指引,一步一步来: 1.安装DNVM(原名KVM) Linux控制台下输入 curl - ...

  9. .NET跨平台之旅:在生产环境中上线第一个运行于Linux上的ASP.NET Core站点

    2016年7月10日,我们在生产环境中上线了第一个运行于Linux上的ASP.NET Core站点,这是一个简单的提供后端服务的ASP.NET Core Web API站点. 项目是在Windows上 ...

  10. 【Oracle 集群】11G RAC 知识图文详细教程之RAC在LINUX上使用NFS安装前准备(六)

    RAC在LINUX上使用NFS安装前准备(六) 概述:写下本文档的初衷和动力,来源于上篇的<oracle基本操作手册>.oracle基本操作手册是作者研一假期对oracle基础知识学习的汇 ...

随机推荐

  1. 0x68 - C题:車的放置

    链接:https://ac.nowcoder.com/acm/contest/1062/C 题目描述 给定一个N行M列的棋盘,已知某些格子禁止放置. 问棋盘上最多能放多少个不能互相攻击的車. 車放在格 ...

  2. java两个list取交集

    直接上代码 List<Integer> list1 = new ArrayList<>(); list1.add(1); list1.add(2); list1.add(3); ...

  3. WebGPU光追引擎基础课:课程介绍

    大家好~我开设了"WebGPU光追引擎基础课"的线上课程,从0开始,在课上带领大家现场写代码,使用WebGPU开发基础的光线追踪引擎 课程重点在于基于GPU并行计算,实现BVH构建 ...

  4. 文心一言 VS 讯飞星火 VS chatgpt (182)-- 算法导论13.4 6题

    六.用go语言,Skelton 和 Baron 教授担心在 RB-DELETE-FIXUP 的情况1开始时,结点 x.p 可能不是黑色的.如果这两位教授是对的,则第5~6行就是错的.证明:x.p 在情 ...

  5. webpack升级-心得

  6. 简单实现el-dialog的拖拽功能

    首先还是要明确几个概念,这里通过修改css并截图给大家介绍下,理解了这几个概念,代码写起来会得心应手许多. clientWidth,clientHeight scrollWidth,scrollHei ...

  7. Qt开发-共享内存使用范例,配合开发者密钥使用后台调试程序或者进入调试模式

    共享内存 就之前不是开发了一个Leventure_DeveloperKey用以调试程序嘛,在这里简单聊一下调试模式的方案. 这里的调试分为了两种,一种是调试模式,一种是开发者模式.需要这两种模式的原因 ...

  8. Qt大型工程开发技术选型PartFinal:CLR调用COM组件

    Qt大型工程开发技术选型PartFinal:CLR调用COM组件 这里其实没什么内容了,直接上代码吧,如下文所示: #pragma once #using <mscorlib.dll> u ...

  9. freeswitch的多租户模式

    概述 freeswitch是一款简单好用的VOIP开源软交换平台. 现在的VOIP服务越来越倾向于云端服务,包括呼叫中心云服务,线路云平台. 而云平台对多个客户的服务就需要做好隔离,包括数据隔离.线路 ...

  10. python之HtmlTestRunner(三)中文字体乱码的情况

    使用HtmlTestRunner测试报告时,遇到中文字体无法识别的情况: 解决方案修改  \Lib\site-packages\HtmlTestRunner\result.py:def generat ...