《OpenCV計算機視覺開發實踐:基于Qt C++》
本書內容
OpenCV是計算機視覺領域的開發者必須掌握的技術。《OpenCV計算機視覺開發實踐:基于Qt C++》基于 OpenCV 4.10與Qt C++進行編寫,全面系統地介紹OpenCV的使用及實戰案例,并配套提供全書示例源碼、PPT課件與作者QQ答疑服務。
《OpenCV計算機視覺開發實踐:基于Qt C++》共分19章,主要內容包括數字圖像視覺概述、搭建OpenCV開發環境、核心模塊Core、圖像處理模塊基礎、灰度變換和直方圖修正、圖像平滑、幾何變換、圖像邊緣檢測、圖像分割、圖像金字塔、圖像形態學、視頻處理、機器學習、數字水印、圖像加解密、物體計數、圖像輪廓、手勢識別以及停車場車牌識別系統等。
本書作者
朱文偉,名校計算機專業統招碩士,20多年C\C++、Java開發經驗。主導開發過密碼、圖形、人工智能等產品。精通Linux、Windows系統開發及數據庫開發技術。著有圖書《OpenCV計算機視覺開發實踐:基于Qt C++》《OpenCV計算機視覺開發實踐:基于Python》《Linux C與C++一線開發實踐(第2版)》《Rust編程與項目實戰》《嵌入式Linux驅動開發實踐》《高性能Linux網絡編程核心技術揭秘》《Linux C/C++服務器開發實踐》《Qt 6.x從入門到精通》《PyQt 5從入門到精通》《Linux C與C++ 一線開發實踐》《Visual C++2017從入門到精通》《Windows C/C++加密解密實戰》《密碼學原理與Java實現》《OpenCV 4.5計算機視覺開發實戰(基于VC++)》《OpenCV 4.5計算機視覺開發實戰:基于Python》。
本書讀者
《OpenCV計算機視覺開發實踐:基于Qt C++》既適合OpenCV初學者、計算機視覺與圖像處理的開發人員、人工智能圖像處理開發人員閱讀,也適合作為高等院校或者高職高專院校計算機視覺與圖像處理相關專業的教材。
本書目錄
第1章? 數字圖像視覺概述1
1.1? 圖像的基本概念1
1.1.1? 圖像和圖形1
1.1.2? 什么是數字圖像1
1.1.3? 數字圖像的特點2
1.1.4? 圖像單位(像素)2
1.1.5? 圖像分辨率3
1.1.6? 屏幕分辨率3
1.1.7? 圖像的灰度4
1.1.8? 灰度級4
1.1.9? 圖像深度4
1.1.10? 二值圖像5
1.1.11? 灰度圖5
1.1.12? 彩色圖像5
1.1.13? 通道6
1.1.14? 圖像存儲6
1.2? 圖像噪聲6
1.2.1? 圖像噪聲的定義6
1.2.2? 圖像噪聲的來源7
1.2.3? 圖像噪聲的濾除7
1.3? 圖像處理8
1.3.1? 圖像處理的分類8
1.3.2? 數字圖像處理9
1.3.3? 數字圖像處理常用的方法9
1.3.4? 圖像處理的應用12
1.4? 圖像信號處理層次12
1.5? 計算機視覺13
1.5.1? 計算機視覺的概念13
1.5.2? 計算機視覺系統的構成和分類14
1.5.3? 機器視覺的優勢14
1.5.4? 機器視覺系統的應用14
1.5.5? 計算機視覺與相關學科的關系15
1.6? OpenCV概述15
1.7? Qt簡介17
第2章? 搭建OpenCV開發環境19
2.1? Windows下搭建OpenCV開發環境19
2.1.1? 下載和安裝Qt19
2.1.2? 下載和解壓OpenCV26
2.1.3? 了解構建工具27
2.1.4? 下載和安裝CMake28
2.1.5? 生成Makefile文件30
2.1.6? 開始編譯OpenCV33
2.1.7? Qt開發的第一個OpenCV程序34
2.2? Linux下搭建OpenCV開發環境38
2.2.1? 準備編譯OpenCV所需依賴39
2.2.2? 編譯OpenCV源碼40
2.2.3? Linux下的第一個OpenCV程序43
2.2.4? 下載Qt46
2.2.5? 安裝依賴包46
2.2.6? 安裝Qt47
2.2.7? Linux下用Qt開發OpenCV51
2.2.8? 做個快照54
2.3? 數學函數55
2.4? OpenCV架構56
2.5? 圖像輸入輸出模塊imgcodecs57
2.5.1? imread讀取圖像文件58
2.5.2? imwrite保存圖片60
2.6? OpenCV界面編程62
2.6.1? 新建窗口并顯示62
2.6.2? 單窗口顯示多幅圖像64
2.6.3? 銷毀窗口66
2.6.4? 調整窗口大小68
2.6.5? 鼠標事件69
2.6.6? 鍵盤事件71
2.6.7? 滑動條事件73
第3章? 核心模塊Core76
3.1? 矩陣操作76
3.1.1? 矩陣類Mat76
3.1.2? 構造法78
3.1.3? 直接賦值法82
3.1.4? 數組法82
3.1.5? create函數法83
3.1.6? 定義特殊矩陣83
3.1.7? 得到矩陣的行數、列數和維數84
3.1.8? 矩陣的數據指針及其打印85
3.1.9? 創建新的矩陣頭86
3.1.10? 得到矩陣通道數88
3.1.11? 復制矩陣88
3.1.12? 判斷矩陣是否有元素93
3.1.13? 矩陣的5種遍歷方式93
3.1.14? 設置矩陣新值100
3.1.15? 得到矩陣的元素總個數100
3.1.16? 矩形類Rect100
3.2? 數組的操作101
3.3? 讀寫XML和YAML文件105
3.3.1? YAML文件簡介105
3.3.2? 寫入和讀取YAML\XML文件的基本步驟106
3.3.3? XML、YAML文件的打開106
3.3.4? 文本和數字的輸入和輸出106
3.3.5? OpenCV數據結構的輸入和輸出106
3.3.6? vector(arrays)和maps的輸入和輸出107
3.3.7? 文件關閉107
第4章? 圖像處理模塊基礎113
4.1? 顏色變換cvtColor113
4.2? 畫基本圖形115
4.2.1? 點的表示115
4.2.2? 畫矩形116
4.2.3? 畫圓117
4.2.4? 畫橢圓119
4.2.5? 畫線段122
4.2.6? 填充多邊形122
4.3? 像素存放類Scalar124
4.4? 使用隨機數126
4.4.1? 產生一個隨機數128
4.4.2? 返回下一個隨機數130
4.4.3? 用隨機數填充矩陣131
4.5? 文字繪制132
4.6? 為圖像添加邊框139
4.7? 在圖像中查找輪廓142
第5章? 灰度變換和直方圖修正149
5.1? 點運算149
5.1.1? 基本概念149
5.1.2? 點運算的目標150
5.1.3? 點運算的分類150
5.1.4? 點運算的特點150
5.1.5? 點運算的應用150
5.2? 灰度變換151
5.2.1? 灰度變換概述151
5.2.2? 灰度變換的作用152
5.2.3? 灰度變換的方法152
5.2.4? 灰度化152
5.2.5? 對比度155
5.2.6? 灰度的線性變換155
5.2.7? 分段線性灰度變換160
5.2.8? 對數變換和反對數變換165
5.2.9? 冪律變換170
5.3? 直方圖修正172
5.3.1? 直方圖的概念172
5.3.2? OpenCV實現灰度直方圖173
5.3.3? 直方圖均衡化175
第6章? 圖像平滑181
6.1? 平滑處理算法181
6.2? 線性濾波183
6.2.1? 歸一化方框濾波器183
6.2.2? 高斯濾波器185
6.3? 非線性濾波188
6.3.1? 中值濾波188
6.3.2? 雙邊濾波189
第7章? 幾何變換193
7.1? 幾何變換基礎193
7.2? 圖像平移196
7.3? 圖像旋轉198
7.4? 仿射變換204
7.5? 圖像縮放207
7.5.1? 縮放原理207
7.5.2? OpenCV中的縮放209
第8章? 圖像邊緣檢測211
8.1? 圖像邊緣檢測概述211
8.2? 邊緣檢測研究的歷史現狀213
8.3? 邊緣定義及類型分析214
8.4? 梯度的概念216
8.5? 圖像邊緣檢測的應用216
8.6? 目前邊緣檢測存在的問題217
8.7? 邊緣檢測的基本思想218
8.8? 圖像邊緣檢測的步驟219
8.9? 經典圖像邊緣檢測算法220
8.9.1? 差分邊緣檢測221
8.9.2? Roberts算子223
8.9.3? Sobel算子邊緣檢測225
8.9.4? Prewitt算子邊緣檢測227
8.9.5? LoG邊緣檢測算子230
8.9.6? 邊緣檢測的新技術與方法235
第9章? 圖像分割238
9.1? 圖像分割概述238
9.2? 圖像分割的應用240
9.3? 圖像分割的數學定義240
9.4? 圖像分割方法的分類241
9.4.1? 基于閾值化的分割方法242
9.4.2? 基于邊緣的分割方法243
9.4.3? 基于區域的分割方法243
9.4.4? 基于神經網絡的分割方法245
9.4.5? 基于聚類的分割方法246
9.5? 使用OpenCV進行圖像分割246
9.5.1? 閾值分割246
9.5.2? 固定閾值分割247
9.5.3? 自適應閾值分割250
9.6? 彩色圖像分割256
9.7? grabCut算法分割圖像259
9.7.1? 基本概念259
9.7.2? grabCut函數260
9.8? floodFill(漫水填充)分割263
9.8.1? 基本概念263
9.8.2? floodFill函數264
9.9? 分水嶺分割法270
9.9.1? 基本概念270
9.9.2? wathershed函數271
第10章? 圖像金字塔279
10.1? 圖像金字塔概述279
10.2? 高斯金字塔280
10.2.1? 向下采樣281
10.2.2? 向上采樣284
10.3? 拉普拉斯金字塔286
第11章? 圖像形態學288
11.1? 圖像形態學概述288
11.2? 形態學的應用288
11.2.1? 數學上的形態學289
11.2.2? 格289
11.2.3? 拓撲學289
11.2.4? 數學形態學的組成290
11.2.5? 數學形態學的應用290
11.2.6? 操作分類291
11.3? 結構元素291
11.4? 膨脹291
11.5? 腐蝕292
11.6? 開運算294
11.7? 閉運算295
11.8? 實現腐蝕和膨脹296
11.9? 開閉運算和頂帽黑帽299
11.10? 擊中擊不中302
11.11? 利用形態學運算提取水平線和垂直線305
第12章? 視頻處理311
12.1? OpenCV視頻處理架構311
12.2? 類VideoCapture312
12.3? 構造VideoCapture對象312
12.4? 判斷視頻是否打開成功313
12.5? 讀取視頻幀314
12.6? 播放視頻文件314
12.7? 獲取和設置視頻屬性316
12.8? 播放攝像頭視頻319
12.9? 錄制視頻類VideoWriter321
12.9.1? 構造VideoWriter對象321
12.9.2? 初始化或重新初始化322
12.9.3? 連接一個fourcc代碼322
12.10? 實現一個視頻播放器324
第13章? 機器學習330
13.1? 機器學習概述330
13.2? 機器學習發展歷程331
13.3? 機器學習研究現狀332
13.3.1? 傳統機器學習的研究現狀333
13.3.2? 大數據環境下機器學習的研究現狀334
13.4? 機器學習的分類334
13.4.1? 基于學習策略的分類335
13.4.2? 基于學習方法的分類335
13.4.3? 基于學習方式的分類336
13.4.4? 基于數據形式的分類336
13.4.5? 基于學習目標的分類336
13.5? 機器學習常見算法336
13.6? 機器學習的研究內容338
13.7? 機器學習的應用339
13.8? OpenCV中的機器學習340
13.8.1? 支持向量機341
13.8.2? 貝葉斯分類器345
第14章? 數字水印348
14.1? 數字水印概述348
14.1.1? 數字水印的特點349
14.1.2? 圖像數字水印349
14.1.3? 數字水印原理349
14.1.4? 嵌入過程350
14.1.5? 提取過程350
14.2? 相關函數351
14.3? 代碼實現數字水印354
第15章? 圖像加密和解密357
15.1? 圖像加密和解密原理357
15.2? 相關函數358
15.3? 代碼實現圖像加解密359
第16章? 物體計數361
16.1? 物體計數基本原理361
16.2? 在圖像上繪制文字361
16.3? 代碼實現藥片計數364
第17章? 圖像輪廓367
17.1? 圖像輪廓概述367
17.2? 應用場景368
17.3? OpenCV中的輪廓函數368
17.3.1? 查找輪廓findContours368
17.3.2? 輪廓的基本屬性369
17.3.3? 繪制輪廓drawContours370
17.3.4? 求輪廓面積contourArea370
17.4? 實戰輪廓函數371
17.5? 實戰黑白翻轉373
第18章? 手勢識別375
18.1? 手勢識別概述375
18.2? 凸包和凸包檢測375
18.2.1? 查找凸包的示例378
18.2.2? 凸缺陷及其意義381
18.3? 手勢識別原理387
18.4? 區分手勢0和1390
18.5? 區分手勢2到5392
第19章? 停車場車牌識別系統397
19.1? 車牌識別技術概述397
19.2? 車牌識別技術的宏觀分析398
19.2.1? 國外技術分析398
19.2.2? 國內技術分析400
19.2.3? 車牌識別技術的難點401
19.2.4? 車牌識別系統的開發思路401
19.3? 車牌定位技術402
19.3.1? 車牌特征概述402
19.3.2? 車牌定位方法403
19.3.3? 車牌圖像預處理407
19.3.4? 車牌圖像的灰度化407
19.3.5? 車牌圖像的直方圖均衡化408
19.3.6? 車牌圖像的濾波410
19.3.7? 車牌圖像的二值化411
19.3.8? 車牌圖像的邊緣檢測411
19.3.9? 車牌圖像的灰度映射412
19.3.10? 車牌圖像的改進型投影法定位412
19.4? 車牌字符分割技術414
19.4.1? 常用車牌字符分割算法414
19.4.2? 車牌傾斜問題416
19.4.3? 車牌傾斜度檢測方法416
19.4.4? 車牌傾斜度校正方法417
19.4.5? 車牌邊框和鉚釘的去除417
19.4.6? 車牌字符分割417
19.4.7? 基于垂直投影和先驗知識的車牌字符分割418
19.4.8? 粘連車牌字符的分割419
19.4.9? 斷裂車牌字符的合并420
19.4.10? 對車牌字符的切分結果進行確認420
19.5? 車牌字符識別技術421
19.5.1? 模式識別421
19.5.2? 字符識別422
19.5.3? 漢字識別424
19.6? 系統設計424
19.7? 系統拓撲結構426
19.8? 停車場端的詳細設計426
19.9? 辦公室端的詳細設計433
19.9.1? 創建項目433
19.9.2? 設計界面433
19.9.3? 實現構造函數434
19.9.4? 文件信息類MyFileInfo435
19.9.5? 實現連接服務器函數436
19.9.6? 關聯按鈕槽函數437
19.9.7? 實現文件下載功能437
19.9.8? 接收文件信息438
19.9.9? 接收文件數據440
19.9.10? 圖像處理相關的成員變量441
19.9.11? 實現打開文件441
19.9.12? 實現圖像二值化442
19.9.13? 實現定位車牌444
19.9.14? 實現分割字符447
19.9.15? 實現識別結果452
19.9.16? 運行程序455
本書特色
(1)基于Qt C++跨平臺特性,需要Qt C++編程基礎知識。
(2)基于Python 3.8和OpenCV 4.10版本編寫,面向初學者,涵蓋傳統的圖形圖像算法與視頻處理方法,并配以示例代碼,內容豐富,行文通俗易懂。
(3)詳解OpenCV 中的220多個函數,并給出100多個示例程序,以及車牌識別、目標檢測、數字水印、圖像加解密、物體計數、圖像輪廓、手勢識別等案例。
(4)配套示例源碼、PPT課件、配圖PDF文件與作者QQ一對一答疑服務。
本文摘自《OpenCV計算機視覺開發實踐:基于Qt C++》,獲出版社和作者授權發布。
OpenCV計算機視覺開發實踐:基于Qt C++——jdhttps://item.jd.com/14417875.html