###### tags: `Raspberry Pi` `Raspbian` `C++` `OpenCV` `軟體安裝` `IoT`
# **在Raspbian上安裝OpenCV**
## 硬體 Raspberry Pi 3
| | Raspberry Pi 3|
|:---:|:-------|
|SoC|Broadcom BCM2837(CPU,GPU DSP和SDRAM、USB)
|CPU|ARM Cortex-A53 64位元 (ARMv8系列) 1.2GHz (四核心)
|GPU|Broadcom VideoCore IV[43], OpenGL ES 2.0, 1080p 30 h.264/MPEG-4 AVC高畫質解碼器
|記憶體|1024 MB (LPDDR2)
|影像輸出|畫面用RCA端子(PAL & NTSC)、HDMI,HDMI介面可使用14種解析度,分別從640×350到1920×1200之間
|板載儲存|MicroSD卡插槽
|網路介面|10/100Mbps 乙太網介面(RJ45介面),支援802.11n無線網路及藍牙4.1
---
## 軟體 OpenCV 3.1.0
OpenCV的全稱是Open Source Computer Vision Library,是一個跨平台的電腦視覺庫。OpenCV是由英特爾公司發起並參與開發,以BSD授權條款授權發行,可以在商業和研究領域中免費使用。OpenCV可用於開發實時的圖像處理、電腦視覺以及模式識別程式。該程式庫也可以使用英特爾公司的IPP進行加速處理。
OpenCV可用於解決如下領域的問題:
+ 人機互動
+ 物體識別
+ 圖像分割
+ 人臉識別
+ 動作識別
+ 運動跟蹤
+ 機器人
|OpenCV|可使用|
|:---:|:---|
|程式語言|C\C++、Python、Java、MATLAB/OCTAVE、C#、Ch、Ruby、CUDA|
|安裝環境|Windows、Android、Maemo、FreeBSD、OpenBSD、iOS、Linux、Mac OS等|
OpenCV目前最新有2.4.13和3.1.0兩種版本,第2版的更新是為了讓以前的開發的程式能夠執行並慢慢轉換到第3版,因此目前以**第3版(3.X.X)為主**。
### [OpenCV下載](http://opencv.org/downloads.html)
---
## 安裝Raspbian
### 建置PI並安裝Raspbian([參考](https://hackmd.io/s/SyREPtoK))
---
### 安裝OpenCV
**1. 更新套件清單並升級:**
```
sudo apt-get update
sudo apt-get dist-upgrade -y
reboot
```
update: 系統將現有的 Package 升級, 如果有相依性的問題, 而此相依性 需要安裝其它新的 Package 或 影響到其它 Package 的相依性時, 此 Package 就不會被升級, 會保留下來。
dist-upgrade: 可以聰明的解決相依性的問題, 如果有相依性問題, 需要 安裝/移除 新的 Package, 就會試著去 安裝/移除 它。 (所以通常這個會被認為是有點風險的升級)
-y:對所有詢問都作肯定的回答,同時不作任何提示
**2. 安裝Opencv套件**
+ **編譯器:**
`sudo apt-get install build-essential`
+ **必要套件:**
`sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev libxvidcore-dev libx264-dev libv4l-dev`
+ **選擇性套件:**
`sudo apt-get install python-dev python-numpy libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev libtbb2 libtbb-dev`
|套件名稱|套件說明|
|:---:|:---|
|libgtk2.0-dev|圖形視窗程式庫|
|libavcodec-dev libavformat-dev libswscale-dev libxvidcore-dev libx264-dev libv41-dev|音訊視訊的編解碼、錄製、轉換、串流|
|python-dev python-numpy|python相關|
|libjpeg-dev libpng-dev libtiff-dev libjasper-dev|圖片格式|
|libdc1394-22-dev|IEEE 1934相機介面(請裝)|
|libtbb2 libtbb-dev|[TBB](https://www.threadingbuildingblocks.org/download)是C/C++平行處理程式庫,可讓執行速度加快,但**raspbian沒有這套件**|
++編譯器與必要套件一定要裝++,選擇性套件可裝可不裝。
**3.下載並解壓縮OpenCV(2選1)**
+ 輸入指令
```
wget https://github.com/Itseez/opencv/archive/3.1.0.zip
unzip 3.1.0.zip
```
+ 進[官網](http://opencv.org/)下載
`unzip 3.1.0.zip`


**4.進入OpenCV資料夾,新增一個資料夾並進入**
```
cd opencv-3.1.0
mkdir build
cd build
```
**5.執行cmake生產建置需要的設定檔**
`cmake -D CMAKE_BUILD_TYPE=RELEASE -D BUILD_TBB=ON -D WITH_TBB=ON -D CMAKE_INSTALL_PREFIX=/usr/local ..`
TBB設置版本

設定成功

`-D BUILD_TBB=ON` TBB平行處理程式庫藉由這裡裝,但是版本通常較舊。
**6.開始建置**
`make -j4`
參數「-j4」可充分利用四個核心執行。
**7.安裝**
`sudo make install`
**8.執行指令更新程式庫**
`sudo ldconfig`
**9.檢查OpenCV版本**
`pkg-config --modversion opencv`

**10.測試OpenCV(以C++為例,使用圖檔test.png)**
```
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main(){
Mat image = imread("test.png", -1);
imshow("test", image);
waitKey(0);
return 0;
}
```
**11.編譯和執行**
+ 編譯(2選1)
```
g++ -lopencv_core -lopencv_highgui -lopencv_imgcodecs tes.cpp
g++ `pkg-config --libs opencv` test.cpp
```
+ 執行
`./a.out`

---
如出現錯誤如下
OpenCV : libopencv_core.so.2.4: cannot open shared object file: No such fileor directory
執行程式前請先輸入:
`export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib`
---
## 參考文章
http://yehnan.blogspot.tw/2015/12/raspberry-piraspbianopencv.html