在樹莓派4B上使用.Net Core進行開發OpenCV


本文已假設你的樹莓派已經使用cmake編譯並安裝好OpenCV和dotnet

OpenCV和dotnet安裝(本文使用OpenCV 4.4.0):

在樹莓派上安裝OpenCV教程(英文 - 建議):https://pimylifeup.com/raspberry-pi-opencv/

在樹莓派上安裝OpenCV教程(中文):https://www.cnblogs.com/fjlinww/p/11956264.html

在編譯的過程中會提示你有幾個文件找不到,需要去這個issue上下載這個老哥提供的缺失文件的地址https://github.com/opencv/opencv_contrib/issues/1301#issuecomment-447181426

然后復制到~/opencv_contrib/opencv_contrib-4.4.0/modules/xfeatures2d/src/下

 

 

 

在樹莓派上手動安裝dotnet教程(中文 - 官方):https://docs.microsoft.com/zh-cn/dotnet/core/install/linux-debian#manual-install

記得在樹莓派應該下載linux-arm32的binaries

使用.Net Core進行OpenCV開發步驟:

1.從github:https://github.com/shimat/opencvsharp/releases上下載Release(例如4.4.0則下載OpenCvSharp-4.4.0-20200725.zip)

2.解壓zip文件后如下:

 

 

 3.解壓后在自己Windows10的電腦上創建一個.Net Core 控制台項目,然后添加以下三個dll

 

 

 4.然后再添加OpenCvSharpExtern.dll(注意,根據自己系統添加x64還是x86的,添加這個是為了方便自己在win上進行開發,部署到樹莓派需要編譯一個so文件復制到發布根目錄,后面會講到)

 

 

 5.在新建的OpenCv .net項目引用完四個dll后在main方法嘗試粘貼並運行以下代碼:

static void Main(string[] args)
        {
            Mat mat = new Mat("lenna.png", ImreadModes.Color);

            for (int y = 0; y < mat.Height; y++)
            {
                for (int x = 0; x < mat.Width; x++)
                {
                    Vec3b color = mat.Get<Vec3b>(y, x);
                    byte temp = color.Item0;
                    color.Item0 = color.Item2; // B <- R
                    color.Item2 = temp;        // R <- B
                    mat.Set<Vec3b>(y, x, color);
                }
            }
        }

記得隨便復制一個圖片改成lenna.png放到\bin\Debug\netcoreapp3.1目錄下,方便調試的時候能夠讀到該圖片

如果跑起來沒問題說明已經可以進行下一步了。

在樹莓派上編譯libOpenCvSharpExtern.so文件(均在樹莓派4B上操作)

准備:先安裝Mono,請按順序執行以下命令:

sudo apt-get -y install apt-transport-https dirmngr gnupg ca-certificates
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
echo "deb https://download.mono-project.com/repo/debian stable-raspbianstretch main" | sudo tee /etc/apt/sources.list.d/mono-official-stable.list
sudo apt-get update
sudo apt-get install mono-complete

1.還是原來這個github repo:https://github.com/shimat/opencvsharp/releases上下載Source Code(例如4.4.0則下載Assets對應的Source Code.zip)

2.解壓源代碼執行以下命令

cd src
mkdir build
cd build
cmake -D CMAKE_INSTALL_PREFIX=${YOUR_OPENCV_INSTALL_PATH} ..
make -j4
sudo make install

注意:${YOUR_OPENCV_INSTALL_PATH}要換成你的OpenCv安裝路徑,我的樹莓派是在/usr/local/include/opencv4則填這個路徑

最后你能在/usr/local/include/opencv4的lib目錄下找到編譯好的libOpenCvSharpExtern.so文件。

在樹莓派上運行OpenCV + .Net Core 3.1:

1.將剛剛在win上寫的Open Cv .Net例子發布后將文件復制樹莓派上;

2.然后將剛剛編譯好的libOpenCvSharpExtern.so文件復制到.Net例子發布后在樹莓派上根目錄下

3.運行dotnet命令將你的例子跑起來看看有沒有報錯。

 

常見問題:

 

Unhandled exception. System.TypeInitializationException: The type initializer for 'OpenCvSharp.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.NativeMethods.redirectError(CvErrorCallback errCallback, IntPtr userdata, IntPtr& prevUserdata)
   at OpenCvSharp.ExceptionHandler.RegisterExceptionCallback() in C:\Projects\opencvsharp\src\OpenCvSharp\PInvoke\ExceptionHandler.cs:line 49
   at OpenCvSharp.NativeMethods.LoadLibraries(IEnumerable`1 additionalPaths) in C:\Projects\opencvsharp\src\OpenCvSharp\PInvoke\NativeMethods\NativeMethods.cs:line 83
   at OpenCvSharp.NativeMethods..cctor() in C:\Projects\opencvsharp\src\OpenCvSharp\PInvoke\NativeMethods\NativeMethods.cs:line 54

 

因為在樹莓派運行opencvsharp需要libOpenCvSharpExtern.so文件,請檢查編譯后的so文件在與你的可執行文件的同級目錄

 

參考鏈接:https://nicruo.github.io/2020/02/12/opencvsharp-on-raspberry-pi-4.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM