在Ubuntu上通过源码安装OpenCV和OpenCVSharp

OpenCV

OpenCV(Open Source Computer Vision Library)是一个开源计算机视觉和机器学习软件库。以下是 OpenCV 的一些主要特性:

主要特性

  • 功能丰富:OpenCV 提供了超过2500个优化的算法,包括图像处理、特征检测、物体识别、面部识别、图像分割、运动分析等。
  • 跨平台:支持 Windows、Linux、macOS、Android 和 iOS 等多种平台。
  • 高性能:经过优化,支持多线程和并行计算,以实现更快的处理速度。
  • 强大的社区支持:OpenCV 拥有活跃的开发者社区,提供了大量的文档、教程和示例代码。

安装和使用

OpencvSharp是对Opencv的.Net封装。要在 .NET 项目中使用 OpenCVSharp,需要根据不同的系统安装不同的运行时包,Nuget上面也有OpenCvSharp4的Ubuntu运行时库,这里只是介绍自己如何通过手动编译自己需要的库。可以通过 NuGet 包管理器安装:

Install-Package OpenCvSharp4

然后,可以在代码中使用 OpenCV 的功能,例如:

internal class Program
{
static void Main(string[] args)
{
Mat mat = new Mat("color.png",ImreadModes.Grayscale);
Cv2.ImWrite("gray.png", mat);
Console.WriteLine("Hello, World!");
Console.ReadKey();
}
}

但是代码在Ubuntu执行会报错,因为缺少依赖库。

Unhandled exception. System.TypeInitializationException: The type initializer for 'OpenCvSharp.Internal.NativeMethods' threw an exception.
---> System.DllNotFoundException: Unable to load shared library 'OpenCvSharpExtern' or one of its dependencies. In order to help diagnose loading problems, consider setting the LD_DEBUG environment variable: libOpenCvSharpExtern: cannot open shared object file: No such file or directory
at OpenCvSharp.Internal.NativeMethods.redirectError(CvErrorCallback errCallback, IntPtr userdata, IntPtr& prevUserdata)
at OpenCvSharp.Internal.ExceptionHandler.RegisterExceptionCallback()
at OpenCvSharp.Internal.NativeMethods.LoadLibraries(IEnumerable`1 additionalPaths)
at OpenCvSharp.Internal.NativeMethods..cctor()
--- End of inner exception stack trace ---
at OpenCvSharp.Internal.NativeMethods.imgcodecs_imread(String fileName, Int32 flags, IntPtr& returnValue)
at OpenCvSharp.Mat..ctor(String fileName, ImreadModes flags)
at OpenCVDemo.Program.Main(String[] args) in C:\Users\liubin\source\repos\OpenCVDemo\OpenCVDemo\Program.cs:line 10
Aborted (core dumped)

image

这种情况下就需要根据自己的情况编译OpenCV和OpenCvSharp。下面介绍如何编译:

在 Linux 上安装 OpenCV 并配置第三方库的步骤如下。假设你使用的是 Ubuntu 发行版,但大部分步骤也适用于其他 Linux 发行版,只是包管理器和一些命令可能会有所不同。

1. 更新系统

首先,确保你的系统是最新的:

sudo apt update
sudo apt upgrade

2. 安装 OpenCV 的依赖项

安装 OpenCV 所需的依赖库:

sudo apt install -y build-essential cmake git libgtk2.0-dev pkg-config libavcodec-dev \
libavformat-dev libswscale-dev libjpeg-dev libpng-dev libtiff-dev gfortran openexr \
libatlas-base-dev python3-dev python3-numpy libv4l-dev libxvidcore-dev libx264-dev

3. 获取 OpenCV 源代码

克隆 OpenCV 和 OpenCV 贡献模块的 GitHub 仓库:

git clone https://github.com/opencv/opencv.git
git clone https://github.com/opencv/opencv_contrib.git

4. 创建构建目录

为 OpenCV 创建一个构建目录:

cd opencv
mkdir build
cd build

5. 配置 OpenCV

使用 CMake 配置 OpenCV,指定需要的选项和库。在这个示例中,我们将指向 opencv_contrib 中的模块,并设置安装路径。

cmake -D CMAKE_BUILD_TYPE=Release \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules \
-D BUILD_opencv_python3=OFF \
-D BUILD_opencv_java=OFF \
-D BUILD_TESTS=OFF \
-D BUILD_PERF_TESTS=OFF \
-D WITH_CUDA=OFF \
-D WITH_OPENGL=ON \
-D WITH_TBB=ON \
-D WITH_V4L=ON \
-D WITH_IPP=ON \
-D WITH_OPENMP=ON \
-D WITH_FFMPEG=ON \
-D BUILD_EXAMPLES=ON \
-D ENABLE_PRECOMPILED_HEADERS=OFF ..

6. 编译 OpenCV

使用 make 命令编译 OpenCV。-j 参数可以根据你的 CPU 核心数来加快编译速度:

make -j$(nproc)

7. 安装 OpenCV

编译完成后,安装 OpenCV 到指定的目录:

sudo make install # 编译的库会安装到/usr/local

8. 配置库路径

安装后,配置共享库路径,以便系统能够找到 OpenCV 库。编辑 /etc/ld.so.conf.d/opencv.conf 并添加以下行:

/usr/local/lib

然后运行以下命令以更新库缓存:

sudo ldconfig

9. 获取 OpenCVSharp 源代码

git clone https://github.com/shimat/opencvsharp.git

10. 编译以及安装OpenCVSharp

cd opencvsharp/src
mkdir build
cd build
cmake -D CMAKE_INSTALL_PREFIX=/usr/local ..
make -j$(nproc)
sudo make install

这下代码就可以正常执行了,输入的color.png是一张彩色图,保存的gray.png是灰度图。
在拉取代码的时候可以自己手动切换到自己需要的版本再编译,编译安装完后会生成动态库,把动态库的路径添加到LD_LIBRARY_PATH或者/etc/ld.so.conf(如第8步)即可。

posted @   长空nice  阅读(174)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 上周热点回顾(2.17-2.23)
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)
点击右上角即可分享
微信分享提示