OpenCV圖像處理|1.1 OpenCV介紹與環境搭建

1.1 OpenCV介紹與環境搭建


1.1.1 介紹
OpenCV(Open Source Computer Vision Library)開放源代碼計算機視覺庫,主要算法涉及圖像處理、計算機視覺和機器學習相關方法。OpenCV 其實就是一堆 C 和 C++語言的源代碼文件,這些源代碼文件中實現了許多常用的計算機視覺算法。OpenCV 可用於開發實時的圖像處理、計算機視覺以及模式識別程序。
OpenCV由一系列C函數和C++類構成,它有C,C++,Python和java接口,當前SDK(Software Development Kit軟件開發工具包) 已經支持C++、Java、Python等語言應用開發, 當前OpenCV本身新開發的算法和模塊接口都是基於C++產生。
其覆蓋了工業產品檢測、醫學成像、無人機飛行、無人駕駛、安防、 衛星地圖與電子地圖拼接、信息安全、用戶界面、攝像機標定、立體視覺和機器人等計算機視覺應用領域。
OpenCV是最初由英特爾公司發起並開發,以 BSD 許可證授權發行,可以在商業和研究領域中免費使用,現在美國機器人公司Willow Garage 爲 OpenCV 提供主要的支持。主要貢獻人物李信弘( Shinn Lee)、Vadim Pisarevsky、Gary Bradski。 (其他付費的機器視覺開發包Matlab、Halcon、VisonPro、Sapera、EVision)。
opencv官網:opencv.org/
opencv庫各版本下載:sourceforge.net/project opencv.org/releases.htm
opencv中文網站論壇:opencv.org.cn/
opencv 1.x中文文檔:wiki.opencv.org.cn/inde
opencv 2.3文檔:opencv.org.cn/opencvdoc
opencv 3.4文檔:docs.opencv.org/master/


圖像處理(Image Processing)是用計算機對圖像進行分析,以達到所需結果的技術。圖像處理技術一般包括圖像壓縮,增強和復原,匹配、描述和識別3個部分。數字圖像處理(Digital Image Processing)是通過計算機對圖像進行去除噪聲、增強、復原、分割、提取特徵等處理的方法和技術。數字圖像是指用工業相機、攝像機、掃描儀等設備經過拍攝得到的一個大的二維數組,該數組的元素稱爲像素,其值稱爲灰度值。
計算機視覺(Computer Vision)是指用攝像機和電腦代替人眼對目標進行識別、跟蹤和測量等機器視覺,並進一步做圖形處理,使之成爲更適合人眼觀察或儀器檢測圖像的一門學科。


1.1.2 體系結構






將每個模塊中的源文件編譯成一個庫文件 ,用戶在使用時, 僅將所需的庫文件添加到自己的項目中,與自己的源文件一起連接成可執行程序即可。
視覺本質上分爲3部分:圖像處理、模式分類(Object Detection、Machine Learning、2D Feature)、場景處理(相機校正和三維重建)。
舊版opencv包含如下部分:


OpenCV主要lib的作用:
opencv_core : core函數庫(基本的數據結構,架構和線性代數, DFT, xml 和yam i/o接口函數等)
opencv_imgproc / opencv_imgcodecs: -圖像處理函數庫(濾波,高斯模糊,形態學膨脹/腐蝕,線性縮放圖像大小,圖像幾何變化,顏色結構變化,計算直方圖等)
opencv_highgui : 用戶交互部分,GUI,圖像和視頻窗口函數庫
opencv_ml :統計機器學習模型函數庫( SVM,決策樹,級聯等)
opencv_features2d :二維特徵檢測器和描述子函數庫( SURF,FAST 等,包括一種新的特徵描述子匹配結構)
opencv_video :動態分析和物體追蹤函數庫(光流法,移動模板,背景消除)
opencv_objdetect :圖像目標檢測函數庫( haar小波 & LBP人臉檢測和識別, HOG人檢測等)
opencv_calib3d :攝像頭標定,視覺匹配和三維數據處理函數庫
opencv_flann :近似最近領域搜索庫和OpenCV分裝器
opencv_contrib :最新貢獻但不是很成熟的函數庫
opencv_legacy :過時代碼,爲了後續代碼兼容性而存在
opencv_gpu :用CUDA來加速一些openCV函數的類庫(相對不太穩定,但對openCV開發非常有幫助)


OpenCV中已經包含如下核心功能
- 二維和三維特徵工具箱
- 運動估算
- 人臉識別系統
- 姿勢識別
- 人機交互
- 移動機器人
- 運動理解
- 對象鑑別
- 分割與識別
- 立體視覺
- 運動跟蹤
- 增強現實(AR技術)
基於上述功能實現需要,OpenCV中還包括以下基於統計學機器學習庫
- Boosting算法
- Decision Tree(決策樹)學習
- Gradient Boosting算法
- EM算法(期望最大化)
- KNN算法
- 樸素貝葉斯分類
- 人工神經網絡
- 隨機森林
- 支掌向量機
詳細模塊介紹見《OpenCV3編程入門》/毛星雲。


1.1.3 搭建開發環境
一、Windows+Visual Studio+OpenCV3.4
(1)安裝VS2017
軟件下載地址visualstudio.com/zh-han
(2)下載OpenCV3.4
(3)配置windows環境變量:
加分號粘貼到Path;E:\OpenCV\opencv3.4\build\x64\vc15\bin


(4)在VS2017配置屬性管理器Debug x64:
VC++目錄:
(Include Directories)
包含目錄(頭文件)E:\OpenCV\opencv3.4\build\include
E:\OpenCV\opencv3.4\build\include\opencv
E:\OpenCV\opencv3.4\build\include\opencv2
(Library Directories)
庫目錄(庫文件) E:\OpenCV\opencv3.4\build\x64\vc15\lib
連接器-輸入:
(Linker-Input-Additional Dependencies)
附加依賴項 opencv_world320d.lib
創建工程:

 


屬性設置:


圖片步驟也可詳見OpenCV3.2.0+VS2017開發環境配置http://blog.csdn.net/sinat_36264666/article/details/73135823?ref=myread###;
二、Ubantu+OpenCV3
官方安裝教程docs.opencv.org/master/
(1)安裝編譯環境及相關庫
■ 編譯庫,gcc和g++即C和C++的編譯庫。
sudo apt-get install build-essential
■ 必須庫,cmake庫用來編譯,其他主要是圖片和視頻輸入輸出編碼解碼要調用的庫。
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
■ 可選庫,主要是python庫,簡單功能可用python實現。
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-de
問題:
1)若sudo apt-get install build-essential安裝不成功?要安裝的軟件包的依賴包版本較低?(類似問題zhihu.com/question/3513 )
先安裝aptitude,它可以比apt-get更加智能地解決依賴問題:
sudo apt-get install aptitude //接下來選y
使用aptitude,會列出問題解決方案:
sudo aptitude install build-essential //選n不接受此方案,並會自動更換;選y接受(我這裏是選了一次n,最後選了y)


安裝好後用sudo apt-get install build-essential測試看看是否成功:




2)libgtk2.0-dev無法安裝?依賴包的問題?
libgtk2.0-dev : 依賴: libgtk2.0-0 (= 2.24.23-0ubuntu1) 但是 2.24.23-0ubuntu1.1 正要被安裝
依賴: libpango1.0-dev (>= 1.20) 但是它將不會被安裝
依賴: libcairo2-dev (>= 1.6.4-6.1) 但是它將不會被安裝
推薦: debhelper 但是它將不會被安裝
E: 無法修正錯誤,因爲您要求某些軟件包保持現狀,就是它們破壞了軟件包間的依賴關係。


解決方法:(更新系統法,此種方法可能也可以解決上面的問題1)
打開設置裏的software & update,在 updates 中 把 important security updates 和 Recommended updates 勾選上(立即更新彈出時點取消),再輸入sudo apt-get update即可。然後必須庫和可選庫中的就都可以安裝成功了,安裝完要5分鐘左右,成功後類似下圖。
(或者更改源法見blog.csdn.net/fireflych )




(2)下載opencv源代碼,解壓後移至Ubantu共享文件夾下
下載地址: opencv.org/releases.htm(比較慢)




(3)建build文件夾
在源碼opencv文件夾下新建build文件夾並進入 :(它用來存放生成的makefile、項目文件以及對象文件和輸出二進制文件等編譯文件)
cd ~/mywinshare/opencv_install/opencv
mkdir build
cd build


(4)cmake編譯源碼(包括opencv_contrib部分)
cmake -D CMAKE_BUILD_TYPE=Release -D OPENCV_EXTRA_MODULES_PATH=~/mywinshare/opencv_install/opencv_contrib/modules/ -D CMAKE_INSTALL_PREFIX=/usr/local ..


編譯成功如下圖:


問題:
1)ippicv_linux_20151201.tgz國內被牆了,有時候下載不成功或者提出hash值不對?


解決方法:
從百度雲盤的源碼資料ippicv_linux_20151201.tgz替換到對應的目錄( <opencv目錄>/3rdparty/ippicv/
downloads/linux-808b791a6eac9ed78d32a7666804320e/ippicv_linux_20151201.tgz)

 




(5)編譯安裝opencv庫到系統,大概需要15~20分鐘
make -j7 &&make install


問題:
1)編譯失敗?
待解決。。。


安裝好後的庫文件如下圖,這樣OpenCV就可以使用了。

 

1.1.4 程序測試 - 圖像顯示

/*測試程序-圖像顯示1*/
#include <opencv2/opencv.hpp> //包含頭文件
#include <iostream> 
using namespace cv;      //使用命名空間cv,下面的cv::line等的前綴可以不寫
using namespace std;    //使用命名空間std,可以調用C++標準庫裏面的函數或類
int main(int argc, char** argv) {    //argc 表示命令行輸入參數的個數(以空白符分隔),argv中存儲了所有的命令行參數
 Mat src = imread("E:/OpenCV/testimage/test.png");     //載入圖像
 if (src.empty()) {                    //是不是爲空
               printf("could not load image...\n");
 return -1;
        }
        namedWindow("test opencv setup", CV_WINDOW_AUTOSIZE);  //創建窗口,自動大小
        imshow("test opencv setup", src);            //顯示圖像,窗口標題
        waitKey(0);                       //x=0無限等待下去,直到有按鍵按下,等待用戶按鍵退出程序
 return 0;
}

2

/*測試程序-圖像顯示2*/
#include <opencv2/opencv.hpp> //包含頭文件
using namespace cv;      //使用cv命名空間,下面的cv::line等的前綴可以不寫
void main() {
 Mat src = imread("E:/OpenCV/testimage/test.png");  //載入圖像
        imshow("test opencv setup", src);          //顯示圖像,在3.x的版本里可以省略namedWindow,它會自動創建
        waitKey(0);                   //等待任意按鍵按下
}

 

參考:

自賈志剛老師OpenCV相關課程

opencv中文網站 opencv.org.cn/

OpenCV官網手冊 OpenCV: OpenCV modules

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