Course Code: txsjcl
Duration: 35 hours
Course Outline:

【大綱】圖像數據處理培訓大綱-陳老師

培訓時長:

5天,35小時(每日含午休1小時)

培訓內容:

 

第一節 機器視覺基礎知識

機器視覺-硬件方案

1.1 方案組成

1.2 應用場景

1.3 典型案例

機器視覺-硬件知識

2.1 相機

2.2 鏡頭

2.3 光源

機器視覺-光學基礎

3.1 光的基本定律

3.2 光的波長與顔色

3.3 光的偏振

第二節 硬件選型

明確需求

1.1 明確客戶需求

1.2 硬件選型流程圖

相機選型

2.1 相機選型流程圖

2.2 相機選型計算

鏡頭選型

3.1 鏡頭選型流程圖

3.2 鏡頭型號選型

3.3 鏡頭焦距選型

3.4 定倍鏡頭倍率β、工作距離WD選型

3.5 補充知識

光源選型

4.1 光源的作用和選型步驟

4.2 了解需求明確目標

4.3 分析差異初選光源

4.4 計算尺寸確認型號

4.5 挑選樣品打光測試

第三節 圖像處理

圖像處理軟件安裝

1.1 vs2019安裝 c++

1.2 opencv安裝

1.3 vs2019+opencv配置

圖像處理算子

2.1、圖像加載、保存與顯示

2.1.1、加載圖像:cv::imread() —— 返回Mat對象

2.1.2、保存圖像:cv::imwrite() —— 只支持JPG/PNG/TIFF格式

2.1.3、顯示圖像:cv::imshow()

2.1.4、實戰案例

2.2、窗口操作

2.2.1、創建窗口:cv::namedWindow()

2.2.2、銷毀指定/所有窗口:cv::destoryWindow() + cv::destoryAllWindow()

2.2.3、移動窗口到指定位置:cv::moveWindow()

2.2.4、調整窗口大小:cv::resizeWindow()

2.2.5、等待按鍵:cv::WaitKey()

2.3、顔色空間轉換:cv::cvtColor()

2.4、邊緣填充:cv::copyMakeBorder()

2.5、圖像融合:cv::addWeighted()

2.6、圖像的三色圖

2.6.1、通道分離:cv::split()

2.6.2、通道合並:cv::merge()

2.6.3、實戰案例

2.7、阈值化處理(基于灰度圖分割目標1與背景0

2.7.1、二值化處理:cv::threshold()

2.7.2、自適應二值化處理:cv::adaptiveThreshold()

2.7.3、實戰案例

2.8、濾波處理

2.8.1、均值濾波器:cv::blur()

2.8.2、方框濾波器:cv::boxFilter()

2.8.3、高斯濾波器:cv::GaussianBlur()

2.8.4、中值濾波器:cv::medianBlur()

2.8.5、雙邊濾波器:cv::bilateralFilter()

2.8.6、自定義卷積:cv::filter2D()

2.8.7、可分離濾波器:cv::sepFilter2D()

2.8.8、實戰案例

2.9、圖像變換

2.9.1、圖像縮放:cv::resize()

2.9.2、圖像翻轉:cv::flip()

2.9.3、圖像旋轉(計算仿射變換的旋轉矩陣):cv::getRotationMatrix2D()

2.9.4、計算仿射變換的2×3矩陣:cv::getAffineTransform()

2.9.5、計算透視變換的3×3矩陣:cv::getPerspectiveTransform()

2.9.6、仿射變換:cv::warpAffine()

2.9.7、透視轉換:cv::warpPerspective()

2.9.8、實戰案例

2.10、形態學操作

2.10.1、腐蝕:cv::erode()

2.10.2、膨脹:cv::dilate()

2.10.3、形態學變化:cv::morphologyEx()。(腐蝕、膨脹、開運算、閉運算、頂帽、黑帽、基本梯度、擊中擊不中)

2.10.4、獲取指定大小和形狀的結構化元素:cv::getStructuringElement()

2.10.5、實戰案例:提取水平線與垂直線

2.10.6、實戰案例

2.11、圖像金字塔

2.11.1、降采樣:cv::pyrDown()

2.11.2、上采樣:cv::pyrUp()

2.11.3、實戰案例

2.12、邊緣檢測(基于灰度圖提取邊緣特征)

2.12.1sobel算子:cv::Sobel()

2.12.2Scharr算子:cv::Scharr()

2.12.3、拉普拉斯算子:cv::Laplacian()

2.12.4Canny算子:cv::Canny()

2.12.5、實戰案例

2.13、輪廓檢測(基于二值化提取輪廓特征)

2.13.1、提取輪廓:cv::findContours()

2.13.2、繪制輪廓:cv::drawContours()

2.13.3、曲線輪廓

1)計算曲線長度或閉合輪廓周長:cv::arcLength()

2)計算與原始曲線最大距離的近似曲線的坐標:cv::approxPolyDP()

3)繪制近似曲線的輪廓:通過drawContours

2.13.4、矩形輪廓

1)計算矩形的左上角坐標與寬高:cv::boundingRect()

2)繪制矩形框:cv::rectangle()

2.13.5、外接圓輪廓

1)計算最小封閉圓的中心點與半徑:cv::minEnclosingCircle()

2)繪制圓形框:cv::circle()

2.13.6、實戰案例

2.14、繪制多種圖形

2.14.1、繪制直線:cv::line()

2.14.2、繪制橢圓:cv::ellipse()

2.14.3、填充多邊形:cv::fillPoly()

2.14.4、添加文字:cv::putText()

2.14.5、實戰案例

2.15、模板匹配

2.15.1、將模板與圖像進行滑動比較:cv::matchTemplate()

2.15.1、查找全局最小值和最大值及其位置:cv::minMaxLoc()

2.15.3、實戰案例

2.16、直方圖(基于灰度圖像計算)

2.16.1、計算一個/多個數組的直方圖:cv::calcHist()

2.16.2、比較兩個直方圖並返回指標:cv::compareHist()

2.16.3、直方圖均衡化:cv::equalizeHist()

2.16.4、自適應直方圖均衡化:cv::createCLAHE()

2.16.5、實戰案例

2.17、基于傅裏葉變換的(低通濾波高通濾波)

2.17.1、傅裏葉變換:cv::dft()

2.17.2、傅裏葉反變換:cv::idft()

2.17.3、計算相位譜:cv::phase()

2.17.4、計算幅度譜:cv::magnitude()

2.17.5、計算xy的坐標:cv::polarToCart()

2.17.6、獲取最適合傅裏葉正變換的寬高:cv::getOptimalDFTSize()

2.17.7、實戰案例

2.18、角點檢測

2.18.1、算法原理

2.18.2Harris角點檢測:cv::cornerHarris()

2.18.3、實戰案例

2.19、目標分割(分水嶺) —— 對圖像質量和參數設置要求較高,需根據實況相應調整。

2.19.1、算法原理

2.19.2、距離變換(計算二值圖像中每個像素與最近的零像素點的距離):cv::distanceTransform()

2.19.3、歸一化:cv::normalize()

2.19.4、基于標記的分水嶺算法:cv::watershed()

2.19.5、實戰案例 —— 基于(自動)標記的分水嶺算法

2.19.6、實戰案例 —— 基于(手動)標記的分水嶺算法

2.19.7、實戰案例 —— 基于(自動標記)邊緣檢測的分水嶺算法

2.20、目標分割(超像素分割SLIC) —— 生成密集細胞圖

2.20.1SLIC算法原理

2.20.2、實戰案例

2.21、霍夫變換

2.21.1、霍夫直線變換(基于邊緣圖像)

2.21.2、霍夫圓變換

第四節 機器視覺實戰項目

1、二維碼識別

2、人臉實時定位

3、點膠檢測

可以根據學員需求添加