【每月好書】OpenCV算法精解

2021-03-02 Python程式設計師

和老規矩一樣,本月月考的獎品就是《OpenCV算法精解》兩本。不知道什麼是月考的同學,請補習下面文章:

每月送書活動來襲,免費哦!

規則就說到這裡,下面是書籍介紹。

-割--

OpenCV算法精解:基於Python與C++

(系統闡述OpenCV基本概念、數學原理、C++和Python實現!)
張平 編著     ISBN 978-7-121-32495-6
2017年11月出版
定價:79.00元
412頁   16開

編輯推薦

Python與C++雙實現,助力讀者輕鬆駕馭OpenCV算法,夯實計算機視覺領域基礎知識!
基本概念理論+數學原理
詳細介紹OpenCV實現對應的函數
注重代碼實現(分別給出Python和C++實現)及實際應用

內容提要

《OpenCV算法精解:基於Python與C++》是以OpenCV 為工具學習數字圖像處理的入門書。內容由淺入深,每一章都採用闡述基本概念、數學原理、C++ 實現、Python 實現相結合的方法,使初學者循序漸進地掌握數字圖像處理技術。本書既注重基本的概念理論及數學原理,也注重其代碼實現及實際應用,力求幫助讀者全面系統地掌握圖像算法的基本技術,同時為掌握OpenCV 打下良好的基礎。

《OpenCV算法精解:基於Python與C++》適合入門圖像處理和計算機視覺領域的初學者閱讀,要求讀者具備一定的C++ 或Python 編程基礎。

目錄


1  OpenCV入門
1.1 初識OpenCV
1.1.1 OpenCV的模塊簡介
1.1.2 OpenCV 2.4.13與3.2版本的區別
1.2 部署OpenCV
1.2.1 在Visual Studio 2015中 配置OpenCV
1.2.2 OpenCV 2.X C++ API的第一個示例
1.2.3 OpenCV 3.X C++ API的第一個示例
1.2.4 在Anaconda 2中配置OpenCV
1.2.5 OpenCV 2.X Python API的第一個示例
1.2.6 OpenCV 3.X Python API的第一個示例
2  圖像數位化
2.1 認識Numpy中的ndarray
2.1.1 構造ndarray對象
2.1.2 訪問ndarray中的值
2.2 認識OpenCV中的Mat類
2.2.1 初識Mat
2.2.2 構造單通道Mat對象
2.2.3 獲得單通道Mat的基本信息
2.2.4 訪問單通道Mat對象中的值
2.2.5 向量類Vec
2.2.6 構造多通道Mat對象
2.2.7 訪問多通道Mat對象中的值
2.2.8 獲得Mat中某一區域的值
2.3 矩陣的運算
2.3.1 加法運算
2.3.2 減法運算
2.3.3 點乘運算
2.3.4 點除運算
2.3.5 乘法運算
2.3.6 其他運算
2.4 灰度圖像數位化
2.4.1 概述
2.4.2 將灰度圖像轉換為Mat
2.4.3 將灰度圖轉換為ndarray
2.5 彩色圖像數位化
2.5.1 將RGB彩色圖像轉換為多通道Mat
2.5.2 將RGB彩色圖轉換為三維的ndarray
2.6 參考文獻
3  幾何變換
3.1 仿射變換
3.1.1 平移
3.1.2 放大和縮小
3.1.3 旋轉
3.1.4 計算仿射矩陣
3.1.5 插值算法
3.1.6 Python實現
3.1.7 C++實現
3.1.8 旋轉函數rotate(OpenCV3.X新特性)
3.2 投影變換
3.2.1 原理詳解
3.2.2 Python實現
3.2.3 C++實現
3.3 極坐標變換
3.3.1 原理詳解
3.3.2 Python實現
3.3.3 C++實現
3.3.4 線性極坐標函數linearPolar(OpenCV 3.X新特性)
3.3.5 對數極坐標函數logPolar(OpenCV 3.X新特性)
3.4 參考文獻
4  對比度增強
4.1 灰度直方圖
4.1.1 什麼是灰度直方圖
4.1.2 Python及C++實現
4.2 線性變換
4.2.1 原理詳解
4.2.2 Python實現
4.2.3 C++實現
4.3 直方圖正規化
4.3.1 原理詳解
4.3.2 Python實現
4.3.3 C++實現
4.3.4 正規化函數normalize
4.4 伽馬變換
4.4.1 原理詳解
4.4.2 Python實現
4.4.3 C++實現
4.5 全局直方圖均衡化
4.5.1 原理詳解
4.5.2 Python實現
4.5.3 C++實現
4.6 限制對比度的自適應直方圖均衡化
4.6.1 原理詳解
4.6.2 代碼實現
4.7 參考文獻
5  圖像平滑
5.1 二維離散卷積
5.1.1 卷積定義及矩陣形式
5.1.2 可分離卷積核
5.1.3 離散卷積的性質
5.2 高斯平滑
5.2.1 高斯卷積核的構建及分離性
5.2.2 高斯卷積核的二項式近似
5.2.3 Python實現
5.2.4 C++實現
5.3 均值平滑
5.3.1 均值卷積核的構建及分離性
5.3.2 快速均值平滑
5.3.3 Python實現
5.3.4 C++實現
5.4 中值平滑
5.4.1 原理詳解
5.4.2 Python實現
5.4.3 C++實現
5.5 雙邊濾波
5.5.1 原理詳解
5.5.2 Python實現
5.5.3 C++實現
5.6 聯合雙邊濾波
5.6.1 原理詳解
5.6.2 Python實現
5.6.3 C++實現
5.7 導向濾波
5.7.1 原理詳解
5.7.2 Python實現
5.7.3 快速導向濾波
5.7.4 C++實現
5.8 參考文獻
6  閾值分割
6.1 方法概述
6.1.1 全局閾值分割
6.1.2 閾值函數threshold(OpenCV3.X新特性)
6.1.3 局部閾值分割
6.2 直方圖技術法
6.2.1 原理詳解
6.2.2 Python實現
6.2.3 C++實現
6.3 熵算法
6.3.1 原理詳解
6.3.2 代碼實現
6.4 Otsu閾值處理
6.4.1 原理詳解
6.4.2 Python實現
6.4.3 C++實現
6.5 自適應閾值
6.5.1 原理詳解
6.5.2 Python實現
6.5.3 C++實現
6.6 二值圖的邏輯運算
6.6.1 「與」和「或」運算
6.6.2 Python實現
6.6.3 C++實現
6.7 參考文獻
7  形態學處理
7.1 腐蝕
7.1.1 原理詳解
7.1.2 實現代碼及效果
7.2 膨脹
7.2.1 原理詳解
7.2.2 Python實現
7.2.3 C++實現
7.3 開運算和閉運算
7.3.1 原理詳解
7.3.2 Python實現
7.4 其他形態學處理操作
7.4.1 頂帽變換和底帽變換
7.4.2 形態學梯度
7.4.3 C++實現
8  邊緣檢測
8.1 Roberts算子
8.1.1 原理詳解
8.1.2 Python實現
8.1.3 C++實現
8.2 Prewitt邊緣檢測
8.2.1 Prewitt算子及分離性
8.2.2 Python實現
8.2.3 C++實現
8.3 Sobel邊緣檢測
8.3.1 Sobel算子及分離性
8.3.2 構建高階的Sobel算子
8.3.3 Python實現
8.3.4 C++實現
8.4 Scharr算子
8.4.1 原理詳解
8.4.2 Python實現
8.4.3 C++實現
8.5 Kirsch算子和Robinson算子
8.5.1 原理詳解
8.5.2 代碼實現及效果
8.6 Canny邊緣檢測
8.6.1 原理詳解
8.6.2 Python實現
8.6.3 C++實現
8.7 Laplacian算子
8.7.1 原理詳解
8.7.2 Python實現
8.7.3 C++實現
8.8 高斯拉普拉斯(LoG)邊緣檢測
8.8.1 原理詳解
8.8.2 Python實現
8.8.3 C++實現
8.9 高斯差分(DoG)邊緣檢測
8.9.1 高斯拉普拉斯與高斯差分的關係
8.9.2 Python實現
8.9.3 C++實現
8.10 Marr-Hildreth邊緣檢測
8.10.1 算法步驟詳解
8.10.2 Pyton實現
8.10.3 C++實現
8.11 參考文獻
9  幾何形狀的檢測和擬合
9.1 點集的最小外包
9.1.1 最小外包旋轉矩形
9.1.2 旋轉矩形的4個頂點(OpenCV 3.X新特性)
9.1.3 最小外包圓
9.1.4 最小外包直立矩形(OpenCV 3.X新特性)
9.1.5 最小凸包
9.1.6 最小外包三角形( OpenCV 3.X新特性)
9.2 霍夫直線檢測
9.2.1 原理詳解
9.2.2 Python實現
9.2.3 C++實現
9.3 霍夫圓檢測
9.3.1 標準霍夫圓檢測
9.3.2 Python實現
9.3.3 基於梯度的霍夫圓檢測
9.3.4 基於梯度的霍夫圓檢測函數HoughCircles
9.4 輪廓
9.4.1 查找、繪製輪廓
9.4.2 外包、擬合輪廓
9.4.3 輪廓的周長和面積
9.4.4 點和輪廓的位置關係
9.4.5 輪廓的凸包缺陷
9.5 參考文獻
10  傅立葉變換
10.1 二維離散的傅立葉(逆)變換
10.1.1 數學理解篇
10.1.2 快速傅立葉變換
10.1.3 C++實現
10.1.4 Python實現
10.2 傅立葉幅度譜與相位譜
10.2.1 基礎知識
10.2.2 Python實現
10.2.3 C++實現
10.3 譜殘差顯著性檢測
10.3.1 原理詳解
10.3.2 Python實現
10.3.3 C++實現
10.4 卷積與傅立葉變換的關係
10.4.1 卷積定理
10.4.2 Python實現
10.5 通過快速傅立葉變換計算卷積
10.5.1 步驟詳解
10.5.2 Python實現
10.5.3 C++實現
10.6 參考文獻
11  頻率域濾波
11.1 概述及原理詳解
11.2 低通濾波和高通濾波
11.2.1 三種常用的低通濾波器
11.2.2 低通濾波的C++實現
11.2.3 低通濾波的Python實現
11.2.4 三種常用的高通濾波器
11.3 帶通和帶阻濾波
11.3.1 三種常用的帶通濾波器
11.3.2 三種常用的帶阻濾波器
11.4 自定義濾波器
11.4.1 原理詳解
11.4.2 C++實現
11.5 同態濾波
11.5.1 原理詳解
11.5.2 Python實現
11.6 參考文獻
12  色彩空間
12.1 常見的色彩空間
12.1.1 RGB色彩空間
12.1.2 HSV色彩空間
12.1.3 HLS色彩空間
12.2 調整彩色圖像的飽和度和亮度
12.2.1 Python實現
12.2.2 C++實現

作者簡介

張平,數學與應用數學專業,算法工程師。主要從事圖像算法研究和產品的應用開發,此外還從事有關機器學習、數據挖掘算法的應用研發工作。

前言

數字圖像處理,即用計算機對圖像進行處理。初期,圖像數位化的設備是非常昂貴和複雜的,隨著網際網路、人工智慧、智能硬體等技術的迅猛發展,硬體成本越來越便宜,使得在我們生活中產生了大量的圖像和視頻,與此同時,計算機視覺技術在人類生活中起到的作用也越來越大,其在商業、工業、醫學等領域有著廣泛的應用。

如今,連市場上很低價位的智慧型手機都可以配置一組高解析度的攝像頭,安卓和蘋果手機應用市場中出現了大量基於圖像處理的App,比如Rookie Cam、VSCO、Snapseed 等,這些App 內均有大量圖像處理方法,如圖像的裁剪、縮放、旋轉、美顏、飽和度和亮度的調整及其各種濾鏡方法等,通常可以滿足人們日常生活中拍照娛樂的需求。我們經常使用的購物App,如淘寶中的「拍立淘」功能,可以用它拍下我們喜歡的物品,然後會自動檢索出與其匹配的商品。還有比如基於人臉識別的手機支付、考勤系統等,基於字符識別的智能停車系統等,可見數字圖像處理已經慢慢地和我們的生活、娛樂息息相關。

本書整體架構及特色

OpenCV 作為一款開源的計算機視覺開發工具包,在計算機視覺領域扮演著非常重要的角色,它在提供源碼的同時,給出了非常完整的OpenCV 函數手冊及其示例手冊,這兩個文檔也是學習OpenCV 的第一手和最重要的資料。這些優勢使得數千名研究人員在視覺領域能夠獲得更高的生產力,並幫助學生和專業人員快速開發和研究有關的機器視覺項目,而我也是其中的眾多受益者之一。

本書大體按照經典教材岡薩雷斯的《數字圖像處理(第三版)》和OpenCV 使用手冊(主要是improc 模塊)的知識脈絡,並在此基礎上加入了某些具體方向的最新方法,試圖幫助初學者更加快速、系統地掌握基本的數字圖像處理技術的數學原理,以及如何將抽象的數學原理轉換為代碼實現的方法,然後詳細介紹了OpenCV 實現對應的函數,並分別給出了C++ 接口和Python 接口的使用方法,以及OpenCV 2.X 和OpenCV 3.X 的區別。

本書面向的讀者

本書中圖像算法的數學原理部分適合數字圖像處理的初學者,示例的C++ 部分適合具備C++ 編程基礎的讀者,示例的Python 部分適合具備Python 編程基礎的讀者,同時對於使用OpenCV 2.X 版本的讀者,書中介紹了OpenCV 3.X 版本的新特性,這樣可以快速過渡到3.X 版本。

致謝

特別感謝電子工業出版社博文視點的編輯鄭柳潔老師,在寫這本書的過程中,她不厭其煩地解答我遇到的各種各樣的問題,真心感謝她一直以來的支持和肯定。

感謝CSDN 的白羽中幫助我聯繫到了博文視點的楊中興和鄭柳潔老師,沒有您的幫助,將無法促成這本書的出版。

感謝我的朋友戴傳軍和張瑩瑩給這本書提出了寶貴的建議,以及幫助我完成了書中一些非常重要的圖表。

感謝我的父母、姐姐一直以來對我生活和工作的支持。
感謝OpenCV 開源庫的所有貢獻者。

相關焦點

  • Python 圖像處理 OpenCV (1):入門
    新系列第一件事兒當然是資源推薦,下面是一些有關 OpenCV 的資源連結:資源連結:官方網站:https://opencv.org/GitHub:https://github.com/opencv/opencv官方文檔:https://docs.opencv.org/中文文檔(非官方):http://www.woshicver.com
  • OpenCV圖像處理專欄十四 | 基於Retinex成像原理的自動色彩均衡算法(ACE)
    前言這個算法是IPOL上一篇名為《Automatic Color  Equalization(ACE) and its Fast Implementation》提出的,這實際上也是《快速ACE算法及其在圖像拼接中的應用》這篇論文中使用的ACE算法,這個算法主要是基於Retinex成像理論做的自動彩色均衡,我用C++ OpenCV實現了,來分享一下
  • 如何快速簡單的安裝opencv-python
    這樣就會從清華鏡像安裝opencv-contrib-python庫。最新版本為4.1.1 ----2019-8-28在opencv-contrib-python 版本中含有額外模塊( Extra modules ),而 opencv-python 版本中只含有基礎模塊。
  • python+opencv實現車牌識別
    文章目錄:一、前言二、訓練分類器2.1、準備訓練用單字符圖片2.2、圖片預處理2.3、用opencv的preprocess_hog()處理圖片2.4、用SVM訓練分類器三、車牌定位四、字符分割五、字符識別六、Mysql保存七、總結八、參考資料一、 前言:最近一直在學習機器學習,花了段時間把《機器學習實戰》(【美】Peter Harrington著
  • 基於OpenCV的圖像分割處理!
    學習目標算法理論介紹閾值處理threshold函數OpenCV使用threshold函數實現閾值化處理。OTSU(大津法)是一種確定圖像二值化分割閾值的算法,由日本學者大津於1979年提出。從大津法的原理上來講,該方法又稱作最大類間方差法,因為按照大津法求得的閾值進行圖像二值化分割後,前景與背景圖像的類間方差最大。它被認為是圖像分割中閾值選取的最佳算法,計算簡單,不受圖像亮度和對比度的影響,因此在數字圖像處理上得到了廣泛的應用。它是按圖像的灰度特性,將圖像分成背景和前景兩部分。
  • OpenCV入門及應用案例:手把手教你做DNN圖像分類
    下面分別介紹3個主要的代碼庫:OpenCV core、opencv_contrib、opencv_extra。1. 核心庫OpenCV core核心庫是OpenCV的主要算法來源。OpenCV採用模塊化結構設計,包含了多個共享或者靜態庫。
  • Python+OpenCV的基礎圖像處理操作匯總
    通過在CMD(命令提示符)中發出以下命令來安裝opencv python(這是一個用於python的非正式預構建opencv包):opencv-contrib-python(包含main和contrib模塊)opencv-python-headless(與opencv-python相同,但沒有
  • 【計算機視覺處理一】OpenCV入門
    詳細內容可以查看OpenCV的官網:https://opencv.org/。2、OpenCV能做什麼?OpenCV中實現了了很多計算機視覺算法,包括基本的圖片運算、閾值處理、圖像濾波、形態學操作等。除此之外,OpenCV還提供了級聯分類器可以用於人臉檢測。不僅是圖片,OpenCV同時提供了視頻處理相關的操作,下面我們來看看一些案例。
  • OpenCV手部關鍵點檢測(手勢識別)代碼示例
    點擊我愛計算機視覺標星,更快獲取CVML新技術前幾日分享了learnopencv.com博主Satya Mallick發表的關於OpenCV
  • Ubuntu16.04 配置OpenCV3.4.2及基本使用
    它輕量級而且高效——由一系列 C 函數和少量 C++ 類構成,同時提供了Python、Ruby、MATLAB等語言的接口,實現了圖像處理和計算機視覺方面的很多通用算法。OpenCV用C++語言編寫,它的主要接口也是C++語言,但是依然保留了大量的C語言接口。該庫也有大量的Python、Java and MATLAB/OCTAVE(版本2.5)的接口。
  • 【走進OpenCV】學習Opencv不得不掌握的操作
    圖像初始化操作#include<opencv2\opencv.hpp>   #include<opencv2\highgui\highgui.hpp>using namespace std;using namespace cv;int main(int argc, char** argv){
  • 【從零學習OpenCV 4】分割圖像——Mean-Shift分割算法
    碼清單8-25 myPyrMeanShiftFiltering.cpp利用均值漂移法分割圖像#include <opencv2/opencv.hpp>#include <iostream>using namespace cv;using namespace std;int main(){ Mat img =
  • python利用opencv實現證件照換底
    opencv今天就給大家介紹一下python利用opencv庫進行藍底換紅底或者白底照片的操作。1.強大的opencv庫說到圖像處理,不得不提opencv庫。它是一個跨平臺的計算機視覺庫,可以運行在不同作業系統上,它由一些列c函數和少量c++函數組成,並提供python,matlab等語言的接口,實現了圖像處理和計算機視覺方面的很多通用算法。我們這裡用的opencv-python 就是opencv的python API接口。
  • OpenCV 4.3.0 發布,OPEN AI LAB Tengine 與OpenCV合作共同加速...
    它輕量級而且高效——由一系列 C 函數和少量 C++ 類構成,同時提供了Python、Ruby、MATLAB等語言的接口,實現了圖像處理和計算機視覺方面的很多通用算法。此次發布Tengine作為OpenCV的一部分,讓OpenCV開源社區生態更全面和豐富,同時也讓Tengine能夠面向更廣泛的全球開發者。
  • 「python opencv 計算機視覺零基礎實戰」第一節
    一、學習目標安裝opencv了解什麼是計算機視覺了解讀取圖片的方法了解顯示圖片的方法二、完成opencv的helloworld程序編寫2.1 opencv是什麼要了解opencv是什麼,首先可以看在opencv中,集成了很多方法,可以讓我們開發者很容易的完成某些視覺上的操作,完成某些目標;通過opencv,可以讓我們無需了解太多的算法知識,簡便的進行開發。
  • 基於OpenCV的條形碼檢測
    打開一個新文件,將其命名為 detect_barcode.py,如何開始寫代碼:# 導入必要的包/庫import numpy as npimport argparseimport imutilsimport cv2# 構造參數解析並分析參數ap = argparse.ArgumentParser()ap.add_argument("-i"
  • 18、OpenCV閾值操作
    在圖像處理中,經常會在經過多種圖像處理算法之後,需要決定最終保留哪部分像素,或者在保留其他像素的情況下忽略低於或高於某個值的像素。
  • OpenCV特徵點檢測——ORB特徵
    >Ethan Rublee and Vincent Rabaud and Kurt Konolige and Gary Bradski, ORB: an efcient alternative to SIFT or SURF, ICCV 2011沒有加上連結是因為作者確實還沒有放出論文,不過OpenCV2.3RC中已經有了實現,WillowGarage有一個talk也提到了這個算法
  • 基於opencv 的圖像處理入門教程
    前言雖然計算機視覺領域目前基本是以深度學習算法為主,但實際上很多時候對圖片的很多處理方法,並不需要採用深度學習的網絡模型,採用目前成熟的圖像處理庫即可實現,比如 OpenCV 和 PIL ,對圖片進行簡單的調整大小、裁剪、旋轉,或者是對圖片的模糊操作。
  • opencv教程-輪廓檢測
    >6:擬合橢圓7:輪廓的常用屬性https://docs.opencv.org將所有點由鏈碼形式翻譯(轉化)為點序列形式cv2.CHAIN_APPROX_SIMPLE - 壓縮水平、垂直和對角分割,即函數隻保留末端的像素點;cv2.CHAIN_APPROX_TC89_L1,cv2.CHAIN_APPROX_TC89_KCOS - 應用 Teh-Chin 鏈逼近算法