ラベル OpenCV の投稿を表示しています。 すべての投稿を表示
ラベル OpenCV の投稿を表示しています。 すべての投稿を表示

2020年8月2日日曜日

在 Android Studio 專案中導入 OpenCV

身為一個 Android BSP 工程師
不只是底層的 system bring up
或是 Linux kernel driver
又或是 HAL,NDK 串接
連上層 application 都要會呢 (´・ω・`)
真的變成名符其實的 Android 全端工程師了=v=

在 Android Studio 中使用 OpenCV for Android
這篇大概已經拖了2、3年了
一直都沒時間寫
然後每次要用就一直重蹈覆轍到處找資料= =
趁現在有時間趕快來寫一下

TL;DR

沒有...

安裝環境

  • Windows 10 1909
  • Android Studio 4.0.1
  • OpenCV 4.4.0

下載 OpenCV for Android

到 OpenCV 官網直接把 Android 版本的壓縮檔給抓下來
https://opencv.org/releases/

解壓縮

把壓縮檔裡面的這個資料夾解壓縮出來
因為這個資料夾的東西匯入專案之後就不重要了
所以隨便找個地方放就可以了

新增一個空專案

如果有舊的專案
這個步驟就直接略過就好

這邊選什麼 template 都可以
因為這個不會對接下來的動作造成影響


找個地方存放專案
然後語言看自己喜好就好
這邊用 kotlin 當示範
選好之後按 [Finish]


然後就會看到它自己開始安裝一些 components

完成之後就會看到專案了

這個時候有件很重要的事

等待它!!


因為這時候 Gradle 會開始下載一些套件跟同步整個專案
所以這個時候不等它的話
等等會出現一堆莫名其妙的錯誤!!
根據每台電腦跟網路的差異性
大約需要 1 ~ 30 分鐘不等的時間
同步完之後
就可以看到 log 裡出現跟下面這張圖差不多的東西了

匯入 OpenCV

[File]→[New]→[Import Module…]

然後就會跳出下面這個匯入用的框框

這邊有件事情很重要
剛剛解壓縮出來的路徑應該是
path/to/OpenCV-android-sdk

但是這邊要指定的 [Source directory]
是它的下一層的 [SDK] 資料夾

不然他會找不到東西的說= =
選完之後就 [Finish]

然後跟舊版的有些差異是
舊版的會需要輸入 [Module Name]
但是新的這個版本沒有地方輸入這個東西
所以等等就會產生一個很微妙的狀況
因為 Module Name 被自動設定成了
被指定的那個資料夾的名稱

所以等等這個 module 的名稱就變成了前面寫的 [SDK]

然後自動 sync 的時候就出現錯誤了Σ( ̄□ ̄|||)

這時候只要按下 error log 中
那行藍色提示安裝 NDK
就會自動跳出跟下面這張圖一樣的安裝畫面了

安裝完成之後按下那顆藍色的 [Finish] 按鈕
它就會自動開始同步專案了

然後根據電腦的效能會需要等個大概幾分鐘不等的時間

最後要在 log 中看到
CONFIGURE SUCCESSFUL 才算成功!!

然後在左上的 Project View 中
找到 [Android] 的字樣
通常專案的顯示預設是用 Android Project 來排列
不過這樣是看不到剛剛匯入的東西的!!
所以這時候要把 Project View 切換成 [Project]

切換完之後
就可以在下面的的 Project View 中
找到剛剛匯入的 [SDK] 資料夾了!!
這個東西就是剛剛匯入的 OpenCV 了!!

然後抱怨一下
以前舊版的還可以設定 module name 的時候
至少可以讓這個顯示的名字好看一點
現在這樣真的很難懂 = =

設定專案相依性

找到左上角的 [File]→[Project Structures…]

然後會跳出專案的設定

最左邊的 column 切換到 [Dependencies]
旁邊的 Modules 切換到 [app]
這邊的 [app] 是你的主要專案
所以有可能會不一樣

然後跟下圖一樣
按一下旁邊的 [+]
選到 [3 Module Dependency]

這時候就會看到跟下圖一樣的相依性追加畫面了
圖中的 [sdk] 就是剛剛匯入的 OpenCV
只是因為前面沒有設定名字
所以這邊根本看不出來他是什麼= =

然後把 [sdk] 打勾按 [OK]
這時候會回到剛剛的畫面
在畫面中的 [Dependency] 就會多了剛剛的 [sdk] 資料夾了

這時候按一下右下角的 [Apply]
然後就會看到跟下圖一樣的浮水印出現了
這時候 Gradle 會開始同步專案
沒意外的話同步完之後按藍色的 [OK] 離開

這時候會在 log 中看到 [CONFIGURE SUCCESSFUL]

到這邊基本上就設定完了!!

變更 compileSdkVersion (非必要)

這個步驟有點神奇
並不是一定要做
如果之後在 build 的時候都沒有出現問題的話
基本上這步可以不用做

不過之後 build 有出問題的話
可以考慮一下這個步驟

先把 Project View 切換回 [Android]
然後找到 Gradle Scripts
底下有個 build.gradle (Module: app)
然後把它打開來
找到 [compileSdkVersion] 這個數值
然後記得它

接著再打開 build.gradle (Module: sdk)
然後把這個的 compileSdkVersion 改成剛剛那個數字

這樣至少可以減少版本不同步的問題

測試

然後在 code 裡面加入測試用的 code

    if (!OpenCVLoader.initDebug()) {
        Log.i("OpenCV", "Failed");
    } else {
        Log.i("OpenCV", "Succeeded");
    }

直接 build …

沒意外的話
就會看到 [BUILD SUCCESSFUL]

這篇就這樣了

2018年6月19日火曜日

[OpenCV] Cross Compiling OpenCV with non-free modules for Linux ARM


最近 Ubuntu 用的比較習慣,所以這次還是使用 Ubuntu 來做 cross compiling。

這次一樣又很偷懶直接拿一台現有的機器來試試看

為了方便起見,這次用 ubuntu 18.04 x64 的系統

直接抓 opencv master branch 下來做。

至於為什麼要做 master branch ...

好像沒有為什麼,就是偷懶不想花時間去找其他版本來用XD

需要的東西

1. Virtualbox 任何可以安裝 Ubuntu 18.04 x64系統的版本都好
2. Ubuntu 18.04 x64 系統映像檔

然後用預設的方式安裝系統

在裝好後乾淨的 Ubuntu 系統上什麼都不要做

連更新什麼的都不要...O(>﹏<)O

雖然其實做了也不影響就是ww

然後直接在 Ubuntu 上打開終端機(alt + F2 → gnome-terminal, ctrl + alt + T)

在 terminal 裡照著下面的指令一行一行的敲就好...

沒有意外的話最後就會出現結果了XD

安裝必要的套件

$ sudo apt-get install git repo bison build-essential zip curl cmake
$ sudo apt-get install gcc-arm-linux-gnueabi g++-arm-linux-gnueabi

建立工作路徑

$ mkdir -p <work_directory>/opencv_build
$ cd <work_directory>/opencv_build

把 OpenCV master 分支的 source 抓下來

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

除了抓 opencv 的 source 之外

non-free 模組是另外的放的

所以才要在把 opencv_contrib 抓下來

建置 OpenCV master 分支

在建置之前先建立一下輸出路徑
$ mkdir -p build
$ cd build

如果不需要 non-free 模組就執行下面這行
$ cmake -DSOFTFP=ON  -DCMAKE_TOOLCHAIN_FILE=../opencv/platforms/linux/arm-gnueabi.toolchain.cmake ../opencv

如果需要 non-free 模組就執行下面這行
$ cmake -DSOFTFP=ON  -DCMAKE_TOOLCHAIN_FILE=../opencv/platforms/linux/arm-gnueabi.toolchain.cmake -DOPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules ../opencv

最後就是建置啦
$ make
$ make install


基本上到這邊只要 make 跑完沒有錯誤就全部結束了...

然後建置完的輸出檔案會再 install 資料夾下

如果資料夾下有東西的話

應該就是有正常結束了

=====


相關來源:

Building / Cross Compiling OpenCV for Linux ARM
http://www.ridgesolutions.ie/index.php/2013/05/24/building-cross-compiling-opencv-for-linux-arm/

Repository for OpenCV's extra modules
https://github.com/opencv/opencv_contrib

2013年12月6日金曜日

[OpenCV] SURF的使用

SIFT 和 SURF 從 2.4 版之後,被移動到 nonfree 裡面。

所以使用時必須加入下面的程式碼。

#include <opencv2/nonfree/nonfree.hpp>

#pragma comment(lib, "opencv_nonfree247d.lib")

#pragma comment(lib, "opencv_nonfree247.lib")


使用前須初始化

cv::initModule_nonfree();


2013年12月3日火曜日

[OpenCV] cv::Mat 與 IplImage 的轉換


cv::Mat → IplImage
IplImage *iplImage = cvLoadImage(imageFile, 1);

cv::Mat matImage(iplImage);


IplImage → cv::Mat
cv::Mat matImage(cv::Size(width, height), CV_8UC3);

IplImage *iplImage = cvCreateImage(cvSize(width, height), 8, 3);

iplImage = &matImage.operator IplImage();


2013年11月19日火曜日

[OpenCV] Windows 8.1 64bit 下的 OpenCV 2.4.7 用於 Visual Studio 2012 的開發環境配置


OpenCV在2.4.4版開始支援Visual Studio 2012,下面記錄環境配置的步驟。

配置方式有很多種,這邊只用最簡單的方式。

1.  從這裡下載 Windows 版的 OpenCV。

2.  執行 OpenCV-2.4.7.exe,將解壓縮路徑指到 C:\

3.  將 C:\ 下的 opencv 變更名稱為 opencv247

4.  開發專案 x64 --> 在系統環境變數 Path 中增加 C:\opencv247\build\x64\vc11\bin;

    開發專案 win32 --> 在系統環境變數 Path 中增加 C:\opencv247\build\x86\vc11\bin;

5.  開發專案 x64 -->
     在 C:\Users\使用者名\AppData\Local\Microsoft\MSBuild\v4.0\ 資料夾下的 Microsoft.Cpp.x64.user.props 中增加下面的敘述


  <PropertyGroup>
    <IncludePath>$(IncludePath);C:\opencv247\build\include</IncludePath>
  </PropertyGroup>
  <PropertyGroup>
    <LibraryPath>$(LibraryPath);C:\opencv247\build\x64\vc11\lib</LibraryPath>
  </PropertyGroup>

    開發專案 win32 -->
     在 C:\Users\使用者名\AppData\Local\Microsoft\MSBuild\v4.0\ 資料夾下的 Microsoft.Cpp.win32.user.props 中增加下面的敘述


  <PropertyGroup>
    <IncludePath>$(IncludePath);C:\opencv247\build\include</IncludePath>
  </PropertyGroup>
  <PropertyGroup>
    <LibraryPath>$(LibraryPath);C:\opencv247\build\x86\vc11\lib</LibraryPath>
  </PropertyGroup>

加完後,看起來會像下圖一樣



















6. 在 Visual Studio 2012中新增一個C++的空專案加入下面的程式碼做測試

#include <opencv2\opencv.hpp>

#ifdef _DEBUG
#pragma comment(lib,"opencv_imgproc247d.lib")
#pragma comment(lib,"opencv_core247d.lib")
#pragma comment(lib,"opencv_highgui247d.lib")
#pragma comment(lib,"opencv_calib3d247d.lib")
#else
#pragma comment(lib,"opencv_imgproc247.lib")
#pragma comment(lib,"opencv_core247.lib")
#pragma comment(lib,"opencv_highgui247.lib")
#pragma comment(lib,"opencv_calib3d247.lib")
#endif

int main()
{
  cv::Mat img = cv::imread("圖片路徑");
  cv::imshow("test", img);
  cv::waitKey(0);
  return 0;
}


沒意外的話應該這樣就完成了(*・ω・)ノ