【大綱】圖像數據處理培訓大綱-陳老師
培訓時長:
5天,35小時(每日含午休1小時)
培訓內容:
目 錄
第一節 機器視覺基礎知識
1 機器視覺-硬件方案
1.1 方案組成
1.2 應用場景
1.3 典型案例
2 機器視覺-硬件知識
2.1 相機
2.2 鏡頭
2.3 光源
3 機器視覺-光學基礎
3.1 光的基本定律
3.2 光的波長與顔色
3.3 光的偏振
第二節 硬件選型
1 明確需求
1.1 明確客戶需求
1.2 硬件選型流程圖
2 相機選型
2.1 相機選型流程圖
2.2 相機選型計算
3 鏡頭選型
3.1 鏡頭選型流程圖
3.2 鏡頭型號選型
3.3 鏡頭焦距選型
3.4 定倍鏡頭倍率β、工作距離WD選型
3.5 補充知識
4 光源選型
4.1 光源的作用和選型步驟
4.2 了解需求明確目標
4.3 分析差異初選光源
4.4 計算尺寸確認型號
4.5 挑選樣品打光測試
第三節 圖像處理
1 圖像處理軟件安裝
1.1 vs2019安裝 c++
1.2 opencv安裝
1.3 vs2019+opencv配置
2 圖像處理算子
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.1、sobel算子:cv::Sobel()
2.12.2、Scharr算子:cv::Scharr()
2.12.3、拉普拉斯算子:cv::Laplacian()
2.12.4、Canny算子: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、計算x和y的坐標:cv::polarToCart()
2.17.6、獲取最適合傅裏葉正變換的寬 / 高:cv::getOptimalDFTSize()
2.17.7、實戰案例
2.18、角點檢測
2.18.1、算法原理
2.18.2、Harris角點檢測: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.1、SLIC算法原理
2.20.2、實戰案例
2.21、霍夫變換
2.21.1、霍夫直線變換(基于邊緣圖像)
2.21.2、霍夫圓變換
第四節 機器視覺實戰項目
1、二維碼識別
2、人臉實時定位
3、點膠檢測
可以根據學員需求添加