樹莓派3和4B安裝OpenCV教程(編譯源碼,一次成功)提供安裝好OpenCV的系統鏡像

目錄

【準備工作】

【正式安裝】

一、安裝OpenCV所需要的依賴工具和一些圖像視頻庫。

二、編譯OpenCV源碼

【系統鏡像補充】


【準備工作】

1.這裏我用的是官方Raspbian-buster-full系統,首先要更換源爲清華源,避免後面下載gtk2.0失敗。

換源方法:https://blog.csdn.net/zqxdsy/article/details/102574239

2. 可以外接屏幕也可以使用VNC遠程操作,在編譯過程中使用tee命令將編譯過程保存下來,可以很方便地進行查看,不用擔心遠程連接中斷的問題,後面會說明,可跳過這裏。

【補充】:我將安裝好OpenCV的系統做了個鏡像,大小隻有4.86G,壓縮後2.09G,直接燒錄到TF卡中就可以使用OpenCV,如圖是調用OpenCV庫的兩個例子,圖1是顯示一張圖片,圖2是進行模板匹配,Makefile和腳本run.sh內容很簡單,就是編譯程序和運行的一些命令,如下圖所示:

圖1 顯示一張圖片
圖2 模板匹配,模板和待檢測的圖片進行匹配,並框選出匹配到的部位

  該系統已安裝好VNC等必要的軟件,靜態IP也已設置好,文檔中有詳細的使用方法,包括樹莓派和windows系統之間的複製和文件傳輸等功能,需要的可自行下載,親測樹莓派4和3都能正常使用,對於該系統有需要補充的地方會在末進行說明。

系統鏡像下載地址 


【正式安裝】

一、安裝OpenCV所需要的依賴工具和一些圖像視頻庫。

1.安裝構建必需工具

// 安裝build-essential、cmake、git和pkg-config
sudo apt-get install build-essential cmake git pkg-config 

2.安裝常用的圖像工具包

// 安裝jpeg格式圖像工具包
sudo apt-get install libjpeg8-dev 

// 安裝tif格式圖像工具包
sudo apt-get install libtiff5-dev 

// 安裝JPEG-2000圖像工具包
sudo apt-get install libjasper-dev 

// 安裝png圖像工具包
sudo apt-get install libpng12-dev 

3.安裝視頻工具包,最後的是v4l中4後面的是 英文字母“l”

sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev

4.安裝gtk2.0,若下載出錯請查看源是否爲清華源或中科大源

sudo apt-get install libgtk2.0-dev

5.安裝優化函數包

sudo apt-get install libatlas-base-dev gfortran

二、編譯OpenCV源碼

1.下載opencv3.4.3和opencv_contrib3.4.3(可以選擇其他版本,不過二者版本號需一致)

法一:直接下載解壓使用

OpenCV源碼下載地址(OpenCV源碼可直接下載,下面的擴展包最好用wget下載)

OpenCV_contrib下載地址(我是直接下載的,有的說直接下載contrib包後面編譯會出錯,因此需要使用wget下載contrib,推薦法二使用wget下載方式,避免出錯)

法二:使用wget下載OpenCV源碼

//** 下載後需要解壓到用戶目錄下

// 下載OpenCV
wget -O opencv-3.4.3.zip https://github.com/Itseez/opencv/archive/3.4.3.zip

// 解壓OpenCV
unzip opencv-3.4.3.zip

// 下載OpenCV_contrib庫:
wget -O opencv_contrib-3.4.3.zip https://github.com/Itseez/opencv_contrib/archive/3.4.3.zip

// 解壓OpenCV_contrib庫:
unzip opencv_contrib-3.4.3.zip

2.將下載的源碼解壓縮,並在終端中進入源碼目錄

//具體路徑請以實際爲準
cd ~/opencv-3.4.3

3.新建release文件夾,用來存放cmake編譯時產生的臨時文件

// 新建release文件夾
mkdir release

// 進入release文件夾
cd release

4.設置cmake編譯參數,安裝目錄默認爲/usr/local 。

注意參數名、等號和參數值之間不能有空格,每行末尾“\”之前有空格,這裏使用換行符“\”是爲了看起來工整,參數值最後是兩個英文的點,意思是上級目錄(【注意】如果在root用戶下執行cmake命令,請將OPENCV_EXTRA_MODULES_PATH的值改爲絕對路徑,如:/home/pi/opencv_contrib-3.4.3/modules):

/** CMAKE_BUILD_TYPE是編譯方式
* CMAKE_INSTALL_PREFIX是安裝目錄
* OPENCV_EXTRA_MODULES_PATH是加載額外模塊
* INSTALL_PYTHON_EXAMPLES是安裝官方python例程
* BUILD_EXAMPLES是編譯例程(這兩個可以不加,不加編譯稍微快一點點,想要C語言的例程的話,在最後一行前加參數INSTALL_C_EXAMPLES=ON,要C++例程的話在最後一行前加參數INSTALL_C_EXAMPLES=ONINSTALL_CXX_EXAMPLES=ON)
**/

sudo cmake -D CMAKE_BUILD_TYPE=RELEASE \
	-D CMAKE_INSTALL_PREFIX=/usr/local \
    -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-3.4.3/modules \
    -D INSTALL_PYTHON_EXAMPLES=ON \
    -D INSTALL_CXX_EXAMPLES=ON \
    -D BUILD_EXAMPLES=ON ..

配置成功後如下圖

因爲下一步的編譯會使用release文件中的東西,假如編譯失敗後還要重新進行cmake,比較耽誤時間,這裏可以直接備份一下cmake好的release文件夾,命名爲release1,重新make的時候可以拿來用。

//返回上層目錄
cd ..
//備份release文件夾
cp -r release ./release1

5.開始編譯

/**
* 以管理員身份,否則容易出錯
* make命令參數-j4指允許make使用最多4個線程進行編譯,這樣編譯速度會更快
* 可以根據自己機器的情況進行更改
* 使用tee命令可以將編譯過程中終端顯示的信息保存到make.log文件中,便於查看,這樣即使VNC斷線,終端的* 信息太多看不到,也可以通過make.log文件查看編譯過程。
**/

sudo make -j4 2>&1 | tee make.log

// 安裝
sudo make install

// 更新動態鏈接庫
sudo ldconfig

保存make編譯信息說明鏈接

如果看到進度編譯到100%,那就說明編譯安裝成功了。

6.其他配置

這步是爲了設置庫的路徑,相當於windows下的環境變量,便於使用OpenCV庫,也可以不進行設置,使用的時候說明路徑也可。例如在編譯時說明使用庫的路徑是 -L/usr/local/lib 

(1)配置opencv.conf
打開opencv.conf配置文件 

//這裏我使用的是gedit,類似於記事本,樹莓派默認的是nano,也可以使用vim,怎麼方便怎麼用
sudo gedit /etc/ld.so.conf.d/opencv.conf

在末尾添加如下內容

/usr/local/lib
?

注意:?表示一個空格,可能原因是有的語言要求最後有一個空格纔可以編譯通過。

加載一下

sudo ldconfig

(2)打開bash.bashrc配置文件

sudo gedit /etc/bash.bashrc

 在最後添加如下內容

PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig       
export PKG_CONFIG_PATH

 重啓樹莓派或者點擊註銷用戶重新登錄

sudo reboot

 

7.檢測OpenCV使用是否正常

法一:C++程序

//C++程序,使用OpenCV讀取一張圖片
#include<iostream>
#include<opencv2/opencv.hpp>

using namespace std;
using namespace cv;

int main()
{
	Mat src=imread("~/1.jpg");
	imshow("src",src);

	waitKey(0);
	return 0;
}

保存該文件爲imshow.cpp,在終端使用下面命令進行編譯(若在前面設置了環境,可以不加-L/usr/local/lib)。

g++ imshow.cpp -o imshow -L/usr/local/lib -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_imgcodecs

給編譯好的文件添加可執行權限並執行

//添加執行權限
sudo chmod a+x imshow

//執行程序
./imshow

法二:Python程序

安裝的Raspbian系統自帶Python編譯器,若沒有安裝,執行下列命令進行安裝

sudo apt-get install python-dev python3-dev

python程序,使用OpenCV畫一條直線

import cv2
import numpy as np
cv2.namedWindow("gray")
img = np.zeros((512,512),np.uint8)#生成一張空的灰度圖像
cv2.line(img,(0,0),(511,511),255,5)#繪製一條白色直線
cv2.imshow("gray",img)#顯示圖像
#循環等待,按q鍵退出
while True:
	key=cv2.waitKey(1)
	if key==ord("q"):
		break
cv2.destoryWindow("gray")

保存該文件爲opencv_test.py,並在終端運行程序

python3 ./opencv_test.py

運行結果如下:


【系統鏡像補充】

 燒寫該系統後如果有使用問題可以私信我,看到後會及時回覆。

1.關於遠程連接(VNC、Putty等)

  樹莓派和電腦通過手機提供熱點連接在同一局域網,可以直接按照文檔說明進行遠程控制;如果連接其他網絡,則需要修改配置文件,因爲之前的192.168.43.XXX是手機熱點的IP。在樹莓派中修改文件/etc/dhcpcd.conf,也就是 DHCP的配置文件。將最後的wlan0中的IP和路由地址的網段修改爲當前網絡的網段,修改完成後保存,重啓樹莓派就可以了。

2.關於在樹莓派和windows之間進行復制粘貼

  直接進行復制粘貼是不行的,該系統已經在樹莓派中安裝autocutsel軟件,只要在終端運行命令“autocutsle -f”就可以了,爲了更加方便,可以在根目錄建一個名爲copy.sh的腳本,使用“chmod a+x copy.sh”命令給予運行權限,每次直接運行這個腳本 就可以了,不用去記那個軟件的名字。

3.下載的系統中會有詳細說明和使用方法,包括用戶密碼、軟件的使用、和windows系統的交互方法等,能夠讓你很快地上手。已安裝中文輸入法,設置了靜態IP,無論連接的是什麼網,只要和連接在同一局域網中,都可以輸入固定的ip地址進行遠程連接樹莓派,其他多餘的軟件一個都沒有安裝。以下是說明的部分截圖:

     還有很多就不一一列舉了。 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章