樹莓派配置完全手冊(四)開發例項
內容提要
本章我們將介紹三個開發例項來檢驗環境搭建是否成功以及為以後的學習奠定基礎。我們將從最簡單的顯示圖片入手,直到編寫完整的具有一定功能的程式來達到鞏固學習的目的。同時我們也將學習如何將PC端的程式移植到樹莓派上進行執行。
4.1 建立工程
4.1.1建立Visual Studio工程
啟動Visual Studio2015,新建一個專案。注意在工程建立介面設定好路徑以免建立完成後找不到工程。在出現的對話方塊中,點選下一步。
在第二個對話方塊中勾選附加選項中的“空專案”。
然後選擇 生成-配置管理器。
點選新建,在對話方塊中選擇“x64”並確定。若已經有了x64,選中後關閉即可。
然後點選檢視-其它視窗-屬性管理器,依次展開<工程名>-Debug|x64-Microsoft.Cpp.x64.user,然後右擊,選擇屬性。
點選屬性管理器中的VC++目錄-包含目錄,右邊會出現三角。點選下拉三角-編輯,在新對話方塊中點選空行,然後輸入:
D:\opencv\build\include
D:\opencv\build\include\opencv
D:\opencv\build\include\opencv2
類似的,在VC++目錄-庫目錄中輸入(Visual Studio 2013將vc14改為vc12):
D:\opencv\build\x64\vc14\lib
隨後按照相似方法修改連結器配置,在連結器-輸入-附加依賴項中輸入:
opencv_world310.lib
然後確定,儲存所有更改,配置完成。建議將工程複製多份避免以後設定的麻煩。
4.1.2 建立Qt工程
然後回到歡迎介面,點選“New Project”,建立一個新專案。在新彈出的對話方塊中依次選擇Application-Qt Console Application,然後點選Choose。然後輸入專案名稱和路徑,點選下一步。選擇剛才上一章已經配置好的構建套件(我的叫做123),點選下一步。最後點選完成。
此時已經建立了一個新專案。雙擊專案中的pro檔案,刪除檔案中的所有程式碼
QT += core
QT -= gui
TARGET = test
CONFIG += console
CONFIG -= app_bundle
TEMPLATE = app
SOURCES += main.cpp
INCLUDEPATH +=/usr/local/include \
/usr/local/include/opencv \
/usr/local/include/opencv2
LIBS +=/usr/local/lib/libopencv_highgui.so \
/usr/local/lib/libopencv_core.so \
/usr/local/lib/libopencv_imgproc.so \
/usr/local/lib/libopencv_imgcodecs.so\
/usr/local/lib/libopencv_videoio.so \
/usr/local/lib/libopencv_video.so \
/usr/local/lib/libopencv_videostab.so \
/usr/local/lib/libopencv_calib3d.so \
/usr/local/lib/libopencv_features2d.so\
/usr/local/lib/libopencv_flann.so \
/usr/local/lib/libopencv_ml.so \
/usr/local/lib/libopencv_objdetect.so \
/usr/local/lib/libopencv_photo.so \
/usr/local/lib/libopencv_shape.so \
/usr/local/lib/libopencv_stitching.so \
/usr/local/lib/libopencv_superres.so
最後儲存退出。建議將此工程複製多份避免每次操作的麻煩。
4.2 顯示圖片
本節為測試例程,主要用來檢驗環境配置是否成功。
PC端操作方法:
首先使用Visual Studio開啟上一章建立好的工程(或者重新按照過程重新建立一個)。在右側“解決方案資源管理器”中的test1-原始檔處右擊,點選新增-新建項。如果找不到“解決方案資源管理器”,點選“檢視”選單即可找到。
在彈出的對話方塊中選擇C++檔案,然後修改名稱(可選),點選新增按鈕。
在新建立的cpp檔案中輸入以下程式碼:
#include<opencv2/opencv.hpp> //標頭檔案
#include"iostream"
using namespace std;
using namespace cv; //包含cv名稱空間
void main()
{
cout << "hello world!";
// 【1】讀入一張圖片,載入影象
Mat srcImage = imread("1.jpg");
// 【2】顯示載入的圖片
imshow("【原始圖】",srcImage);
// 【3】等待任意按鍵按下
waitKey(0);
}
然後在對應的工程存放資料夾下的test1(隨工程名而變)資料夾放置一張圖片,重新命名為1.jpg。
然後回到Visual Studio介面,選擇x64,點選“本地Windows偵錯程式”。
出現如下介面,即證明配置成功。
樹莓派端操作方法:
開啟Qt,再開啟建立好的工程(pro檔案);或者直接將pro檔案拖放到Qt軟體的快捷方式上。然後雙擊開啟main.cpp,將原有程式碼刪除,然後貼上入以下程式碼:
#include<opencv2/opencv.hpp>
#include"iostream"
using namespace std;
using namespace cv;
int main()
{
cout << "hello world!";
Mat srcImage = imread("1.jpg");
imshow("original picture", srcImage);
waitKey(0);
}
然後點選綠色的三角開始構建。發現程式報錯,這是因為我們沒有將引用的圖片放在構建目錄中。一般來說,構建目錄會在存放工程的資料夾裡。找到該資料夾,將圖片1.jpg放入,再次構建執行,程式執行成功。
4.3 邊緣檢測
本例程用來演示OpenCV的基礎功能:邊緣檢測。
開啟附錄中提供的檔案test2.sln,在解決方案管理器中依次展開test2-原始檔,然後開啟源.cpp,閱讀並體會程式碼(有註釋)。
然後選擇x64,點選本地Windows偵錯程式,出現如圖 4 - 22的畫面即證明成功。
按照4.1節的步驟將程式移植到樹莓派上,觀察現象。
4.4 基於OpenCV和攝像頭的消滅圓圈遊戲
本節將介紹一個綜合示例,主要包含了基於光流法的動作檢測演算法和基於Lukas-Kanade光流法的顏色檢測演算法的原理。
光流是一種簡單實用的影象運動的表達方式,通常定義為一個影象序列中的影象亮度模式的表觀運動。光流法檢測運動物體的基本原理是:給影象中的每一個畫素點賦予一個速度向量,形成一個影象運動場,在運動的一個特定時刻,影象上的點與三維物體上的點一一對應,根據各個畫素點的速度向量特徵,可以對影象進行動態分析。如果影象中沒有運動物體,則光流向量在整個影象區域是連續變化的。當影象中有運動物體時,目標和影象背景存在相對運動,運動物體所形成的速度向量必然和鄰域背景速度向量不同,進而檢測出運動物體及位置。光流法的優點在於光流不僅攜帶了運動物體的運動資訊,還攜帶了有關景物三維結構的豐富資訊,它能夠在不知道場景的任何資訊的情況下,檢測出運動物件。
具體功能:開啟程式後,程式首先顯示使用說明,隨後通過攝像頭獲取畫面,在視窗1上顯示實時畫面,並顯示基於影象顏色資訊的圓圈以及顯示當前圓圈數量。使用者通過揮動手臂將圓圈清除,當畫面上的圓圈數量為0時,顯示遊戲成功資訊,提示可以進行下一次遊戲。與此同時,在視窗2上顯示出使用者手臂的運動軌跡,便於進一步分析。
開啟附錄中提供的test3.sln,按照4.2節中的步驟操作,觀察現象。請注意,因為未知BUG,除錯時需要設定為以下狀態:
按照4.1節的步驟將程式移植到樹莓派上,觀察現象。
工程檔案:
連結:http://pan.baidu.com/s/1qXKEvDE 密碼:4g13