【大纲】图像数据处理培训大纲-陈老师
培训时长:
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、点胶检测
可以根据学员需求添加