OpenCV電腦視覺開發實踐:基於Qt C++

朱文偉、李建英

  • OpenCV電腦視覺開發實踐:基於Qt C++-preview-1
  • OpenCV電腦視覺開發實踐:基於Qt C++-preview-2
  • OpenCV電腦視覺開發實踐:基於Qt C++-preview-3
OpenCV電腦視覺開發實踐:基於Qt C++-preview-1

商品描述

"OpenCV是電腦視覺領域的開發者必須掌握的技術。《OpenCV電腦視覺開發實踐:基於Qt C++》基於 OpenCV 4.10與Qt C++進行編寫,全面系統地介紹OpenCV的使用及實戰案例,並配套提供全書示例源碼、PPT課件與作者QQ答疑服務。 《OpenCV電腦視覺開發實踐:基於Qt C++》共分19章,主要內容包括數字圖像視覺概述、搭建OpenCV開發環境、核心模塊Core、圖像處理模塊基礎、灰度變換和直方圖修正、圖像平滑、幾何變換、圖像邊緣檢測、圖像分割、圖像金字塔、圖像形態學、視頻處理、機器學習、數字水印、圖像加解密、物體計數、圖像輪廓、手勢識別以及停車場車牌識別系統等。 《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  下載和安裝Qt 19

2.1.2  下載和解壓OpenCV 26

2.1.3  瞭解構建工具 27

2.1.4  下載和安裝CMake 28

2.1.5  生成Makefile文件 30

2.1.6  開始編譯OpenCV 33

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  下載Qt 46

2.2.5  安裝依賴包 46

2.2.6  安裝Qt 47

2.2.7  Linux下用Qt開發OpenCV 51

2.2.8  做個快照 54

2.3  數學函數 55

2.4  OpenCV架構 56

2.5  圖像輸入輸出模塊imgcodecs 57

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章  核心模塊Core 76

3.1  矩陣操作 76

3.1.1  矩陣類Mat 76

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  矩形類Rect 100

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  顏色變換cvtColor 113

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  像素存放類Scalar 124

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  類VideoCapture 312

12.3  構造VideoCapture對象 312

12.4  判斷視頻是否打開成功 313

12.5  讀取視頻幀 314

12.6  播放視頻文件 314

12.7  獲取和設置視頻屬性 316

12.8  播放攝像頭視頻 319

12.9  錄制視頻類VideoWriter 321

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  查找輪廓findContours 368

17.3.2  輪廓的基本屬性 369

17.3.3  繪制輪廓drawContours 370

17.3.4  求輪廓面積contourArea 370

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和1 390

18.5  區分手勢2到5 392

第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  文件信息類MyFileInfo 435

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