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、点胶检测

可以根据学员需求添加