圖像識別(3)——《OpenCV3編程入門-毛星雲》第一部分 快速上手OpenCV

博主QQ:1356438802

QQ羣:473383394——UVC&OpenCV47



平臺:Win7 64bits + Visual Studio 2012 + OpenCV 2.4.10


接下來的很長一段時間我將沿着學習,記錄整個學習過程和心得,既是自己的學習筆記,也爲後來人提供一份參考資料。


由於我上半年研究了一段時間OpenCV,各種平臺的安裝使用都很熟練了,大家可以去看我前面的文章。主要是爲了適配我們公司一個合作商的Android圖像識別軟件,於是把OpenCV往Android上移植,這裏耗費了大量時間。另外還嘗試過用OpenCV去做UVC錄像,最終發現OpenCV擅長圖像處理,不擅長視頻處理,即使是專業視頻處理開源庫FFMPEG在Android上運行效果也不理想,所以用了AVILIB + H264LIB的方式錄像,需要的童鞋可以去回溯我前面的文章。


好了,廢話少說。沒有安裝開發環境的童鞋可以根據書本進行安裝,我之前已經安裝好了Win7 64bits + Visual Studio 2012 + OpenCV 2.4.10


童鞋們,打開書本!紅色文字是我的註釋

注意這本書有配套源碼,如果有不懂的地方可以直接去下載源碼,運行看效果!


目錄

第一部分 快速上手OpenCV 1

第1章 邂逅OpenCV 3
1.1 OpenCV周邊概念認知 4
1.1.1 圖像處理、計算機視覺與OpenCV4
1.1.2 OpenCV概述 4

注意OpenCV是由Intel建立的。現在已經是個超級跨平臺的項目,Linux、Windows、Mac OS、Android、 iOS、Maemo、FreeBSD、OpenBSD都可以。
1.1.3 起源及發展 5
1.1.4 應用概述 6

應用:人機交互、物體識別、圖像分區、人臉識別、動作識別、運動跟蹤、機器人
1.2 OpenCV基本架構分析 7

OpenCV2共19個組件
1.3 OpenCV3帶來了什麼 11
1.3.1 項目架構的改變 11
1.3.2 將OpenCV2代碼升級到OpenCV3報錯時的一些策略 12
1.4 OpenCV的下載、安裝與配置 14
1.4.1 預準備:下載和安裝集成開發環境 14
1.4.2 第一步:下載和安裝OpenCVSDK 15

官網:http://opencv.org
1.4.3 第二步:配置環境變量 16
1.4.4 第三步:工程包含(include)目錄的配置 17

特別注意這一節有一個“一勞永逸”的工程配置方法!
1.4.5 第四步:工程庫(lib)目錄的配置 21
1.4.6 第五步:鏈接庫的配置 22

這一節中,下面這堆文字大家肯定用的上,嘿嘿:

opencv_calib3d2410d.lib
opencv_contrib2410d.lib
opencv_core2410d.lib
opencv_features2d2410d.lib
opencv_flann2410d.lib
opencv_gpu2410d.lib
opencv_highgui2410d.lib
opencv_imgproc2410d.lib
opencv_legacy2410d.lib
opencv_ml2410d.lib
opencv_objdetect2410d.lib
opencv_video2410d.lib
opencv_nonfree2410d.lib
opencv_stitching2410d.lib
opencv_ts2410d.lib

opencv_videostab2410d.lib
opencv_ocl2410d.lib
opencv_photo2410d.lib
opencv_superres2410d.lib


opencv_calib3d2410.lib
opencv_contrib2410.lib
opencv_core2410.lib
opencv_features2d2410.lib
opencv_flann2410.lib
opencv_gpu2410.lib
opencv_highgui2410.lib
opencv_imgproc2410.lib
opencv_legacy2410.lib
opencv_ml2410.lib
opencv_objdetect2410.lib
opencv_video2410.lib
opencv_nonfree2410.lib
opencv_stitching2410.lib
opencv_ts2410.lib
opencv_videostab2410.lib
opencv_ocl2410.lib
opencv_photo2410.lib
opencv_superres2410.lib

1.4.7 第六步:在Windows文件夾下加入OpenCV動態鏈接庫 25
1.4.8 第七步:最終測試 26
1.4.9 可能遇到的問題和解決方案27

問題5也許以後開發過程中會碰到!
1.5 快速上手OpenCV圖像處理 28

學完下面4個例程,感覺自己棒棒噠!好厲害啊,我已經學會了圖像處理了!
1.5.1 第一個程序:圖像顯示 29
1.5.2 第二個程序:圖像腐蝕 30
1.5.3 第三個程序:圖像模糊 31
1.5.4 第四個程序:canny邊緣檢測 32
1.6 OpenCV視頻操作基礎 34
1.6.1 讀取並播放視頻 34

體驗下用OpenCV,只要3條語句就可以播放視頻,預覽攝像頭,非常便捷!
1.6.2 調用攝像頭採集圖像 35
1.7 本章小結 38



第2章 啓程前的認知準備 39

2.1 OpenCV官方例程引導與賞析 40

剛開始學習,不必去深究後面5個例子背後的原理,直接運行源碼看看效果,感受下OpenCV的強大!彩色目標跟蹤很有意思。
2.1.1 彩色目標跟蹤:Camshift41
2.1.2 光流:opticalflow 42
2.1.3 點追蹤:lkdemo 43
2.1.4 人臉識別:objectDetection43
2.1.5 支持向量機引導 44
2.2 開源的魅力:編譯OpenCV源代碼 45

初學者暫時沒有必要去編譯源代碼,先學會用再說。
2.2.1 下載安裝CMake 45
2.2.2 使用CMake生成OpenCV源代碼工程的解決方案 46
2.2.3 編譯OpenCV源代碼 50
2.3 “opencv.hpp”頭文件認知 53

後面的幾個章節是C語言編程方面的知識,命名規範、main函數的參數argc/argv、printf函數用法,不知道的童鞋可以看下,知道的可以直接略過!
2.4 命名規範約定 54
2.5 argc與argv參數解惑 56
2.5.1 初識main函數中的argc和argv 56
2.5.2 argc、argv的具體含義 57
2.5.3 Visual Studio中main函數的幾種寫法說明 58
2.5.4 總結 59
2.6 格式輸出函數printf()簡析 59
2.6.1 格式輸出:printf()函數 59
2.6.2 示例程序:printf函數的用法示例 60
2.7 智能顯示當前使用的OpenCV版本 61
2.8 本章小結 61



第3章 HighGUI圖形用戶界面初步 63

3.1 圖像的載入、顯示和輸出到文件 64
3.1.1 OpenCV的命名空間64

OpenCV程序標配:

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>

using namespace cv;

3.1.2 Mat類簡析 64
3.1.3 圖像的載入與顯示概述 65
3.1.4 圖像的載入:imread()函數 65

Mat imread(const string &filename, int flags = 1);

bmp jpeg png tif格式基本都支持

  • flags > 0 返回一個3通道的彩色圖像,注意存儲順序爲BGR(藍綠紅),而不是RGB
  • flags = 0 返回灰度圖像
  • flags < 0 返回Alpha通道的加載圖像

3.1.5 圖像的顯示:imshow()函數 66
3.1.6 關於InputArray類型 67
3.1.7 創建窗口:namedWindow()函數 67

void namedWindow(const string &winname, int flags = WINDOW_AUTOSIZE);

  • flags = WINDOW_NORMAL,用戶可以改變窗口的大小
  • flags = WINDOW_AUTOSIZE,窗口根據圖片大小自適應,並且用戶不能手動改變窗口大小
  • flags = WINDOWS_OPENGL,支持OpenGL

3.1.8 輸出圖像到文件:imwrite()函數 68
3.1.9 綜合示例程序:圖像的載入、顯示與輸出 70
3.2 滑動條的創建和使用 73
3.2.1 創建滑動條:createTrackbar()函數 73

int createTrackBar(const string &trackbarname, const string &winname, int *value, int count, TrackbarCallback onChange=0, void *userdata=0);

  • value,滑塊創建時的初始值
  • count,滑塊的最大位置值,最小值都是0
  • onChange,回調函數,每次滑塊位置改變時,都會進行回調
  • userdata,用戶傳給回調函數的數據

3.2.2 獲取當前軌跡條的位置:getTrackbarPos()函數 76
3.3 鼠標操作 76

void setMouseCallback(const string &winname, MouseCallback onMouse, void *userdata=0);

第二個參數,onMouse,窗口裏每次鼠標事件發生後的回調函數。原型:void callback(int event, int x, int y, int flags, void *param),event是鼠標事件,x y是鼠標指針座標值

3.4 本章小結 80


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