OpenCV學習筆記
1.OpenCV入門
因爲我是在學習slam的過程中遇到了OpenCV的問題,所以我就決定先把OpenCV的基本內容給摸清,並且學習的環境是在Ubuntu16.04下,所以我選擇使用C++進行代碼的編寫,並且使用cmake對工程進行編譯。
在我此前安裝ROS系統的時候已經下載並安裝了OpenCV庫,所以可以直接上手,而無需再進行配置。如果有需要可以參考鏈接下載並安裝OpenCV庫:https://blog.csdn.net/gxuphf123/article/details/81121791
由於使用cmake編譯工程,所以得編寫一個CMakeLists.txt文件。
cmake的使用參考鏈接: https://www.cnblogs.com/lidabo/p/7359422.html
//CMakeLists.txt
cmake_minimum_required(VERSION 2.8)
project(test1)
# set c++ standard of 11
set( CMAKE_CXX_FLAGS "-std=c++11" )
# find the library of OpenCV
find_package( OpenCV 3 REQUIRED )
# add head file
include_directories( ${OpenCV_INCLUDE_DIRS} )
add_executable( test1 test1.cpp )
#link the library of OpenCV
target_link_libraries( test1 ${OpenCV_LIBS} )
然後繼續編寫cpp代碼
//test1.cpp
#include<iostream>
using namespace std;
//引入opencv的模塊
#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
//引入cv命名空間
using namespace cv;
int main(int argc,char **argv)
{
if(argc!=2){
cout<<"Usage:display_image ImageToloadAndDisplay"<<endl;
return -1;
}
Mat image;
image =imread(argv[1]); //read file
if(!image.data){
cout<<"Counld not open or find the image"<<endl;
return -1;
}
namedWindow("Display window",CV_WINDOW_AUTOSIZE); //crate a window fordisplay
imshow("Display window",image); //show our image inside it.
waitKey(0);
return 0;
}
# 然後進行工程編譯,首先創建一個build文件夾
$ mkdir build
# 進入build文件夾
$ cd build
# 在build文件夾下進行編譯命令
$ cmake ..
$ make
# 編譯完成之後會產生一個綠色文件,即可執行文件
$ ./[projectname] #運行該執行文件
創建build文件夾的目的在於cmake會產生中間文件,當我們想要發佈代碼時,並不希望中間文件一起發佈出去,所以將中間文件生成在build文件夾中,必要的時候可以直接刪除。
2.OpenCV的基本模塊
- core : 定義了基本的數據結構
- imgproc: 該模塊包含了線性和非線性的圖像濾波 、圖像的幾何變換、顏色空間轉換、結構分析和形狀描述等
- video : 該模塊包含了運動估計、背景分離、對象跟蹤
- calib3d : 該模塊包含了基本的多視角幾何算法,單個立體攝像頭的標定,物體姿態估計,立體相似性算法,3D信息的重建
- feature2d : 該模塊包含了顯著特徵檢測,描述,特徵匹配
- objdetect : 該模塊包含了物體檢測和預定義好的分類器實例(人臉、汽車等)
- highgui : 該模塊包含了視頻捕捉、圖像和視頻的編碼解碼、圖形交互界面的接口
- gpu : 該模塊利用GPU對OpenCV模塊進行加速算法
- ml : 機器學習模塊,包括貝葉斯分類器、決策樹、神經網絡、梯度樹、SVM等
參考鏈接:https://blog.csdn.net/yang_xian521/article/details/6903855
每個模塊的詳細內容請參考該鏈接:https://blog.csdn.net/sinat_35257860/article/details/64121433
OpenCV的常用函數:
https://www.cnblogs.com/xiaopanlyu/p/4561728.html