工业视觉笔记代码---目录

12 篇文章 3 订阅
9 篇文章 7 订阅

ROI接口便捷修改

ROI 接口便捷修改-CSDN博客

工业视觉  一(1-24)

工业视觉需要时可抄的代码---持续更新 一(1-24)

目录

1、批量访问图片,等待键盘

1.2 批量访问图像(不用提前批量重命名)--访问文件夹底下所有同类型图像

1.2.1 单独只有批量访问的

1.3 批量访问图像(也是不用提前批量重命名)--访问文件夹底下所有同类型图像

1.4 批量访问图像(也是不用提前批量重命名)--访问文件夹底下所有同类型图像

1.5 批量访问图像(不用提前批量重命名)--单张和批量前面路径相同(jiefeng)

1.6 批量访问图像(不用提前批量重命名)--单张和批量前面路径相同(bioake暖水管)

1.7 批量访问图(no提前批量重命名)--传入高低曝光两张图, 批量结束结果图集分T和F(shanghai水滴)

1、 的拓展1:遍历时跳过文件夹及非图像文件

1、 的拓展2:字符串相关

2、求均值、方差、差

3、将数据写入txt文件并保存到指定路径

4、图像预处理相关

4.1 阈值、膨胀、删除最小连通域

4.2 细化

4.3 两图重叠看效果

4.4 锐化

4.5 只删除小轮廓(封装好的小接口)

5、将细化后的黑白图像中,白色点存入ArcLst后按Y排序

6、使点集 中的点重排(按x坐标或y坐标)

7、判图是否为全黑

8、循环测试图像

9、打印区域内的像素灰度值

9.1 传入上下左右,打印对应区域内的像素灰度值

9.2 找出最大及最小灰度值 + 根据max灰度值自适应阈值 + 打印区域内的像素灰度值:

9.3  获取每【行】的像素均值 + 打印区域内的像素灰度值

9.4  获取每【列】的像素均值 + 打印区域内的像素灰度值

9.5  获取每【指定轮廓】内的像素均值 + 打印区域内的像素灰度值

9.5 拓展:获取所锁的上下边缘 紧邻的部分激光区域点集(根据轮廓点集所得)

10、检测最接近给定坐标的光斑直径

11、打印每行白点个数,并返回每行像素和

12、打印耗时

13、造黑图测试

14、提取骨干点集(同一行只保存一个白点,即最高亮处的中心点)

纯代码,提取骨干点集和骨干处像素部分没有封装成函数版本: 

14.0 提取骨干点集和骨干处像素部分 已封装成函数版本: 

        14.0.1 原始版本

 骨干提取函数调用:

14.0.2 修改版本(优先选择右叉) 

可视化骨干点集:

14.1 获取最右点集(基于已有骨干点集)

14.2 获取最左点集并可视化(基于骨干点集)

14.3 图像上半部分左右翻转后再提取骨干,骨干转换成原来的坐标后再接上后半部分的骨干由此获得完整骨干

14.4 图像上半部分上下翻转后再提取骨干,骨干转换成原来的坐标后再接上后半部分的骨干由此获得完整骨干

15、将直线检测后的所有白点入列(同一行有多个点的话就只保留最右边的点),同时打印x值趋势

15.1 直线检测并打印出正反斜率的直线信息

16、已有两个点坐标,求对应线段

17、已有直线的斜率和截距,寻找离直线最近的点坐标

18、vector中求众数

18.1 (原始版本)

18.2 (兼容vector中存在负数元素的情况 --- 修改优化后版本)

19、传入的图片截取ROI后再进入识别接口

例子2:

例子3:返回四点+双点集

例子 4.1:直接在roi的接口画结果再传出

例子 4.2:直接使用识别算法接口里传出的可视化画布

例子 5.0: 识别接口模板

例子 5.1: 返回单点 

例子 5.1.1: 返回单点+上下翻转再进入识别

例子 5.1.2: 返回单点+1个点集+上下翻转再进入识别 

例子 5.2: 返回双点 

例子 5.2.1: 返回双点+1个点集

例子 5.3: 返回双点集

例子 5.4: 返回三点+双点集+左右翻转再进入识别

例子 5.5:传入两张原图(高/低曝光图),返回单点(高曝光图和激光图结合时使用)

例子 5.6: 返回双点+三点集+左右/上下翻转再进入识别

例子 5.7:更多详情,请跳转

20、vs2015  dll库转成可运行的执行程序(后面可相互随时转换)

20.1 自己调用dll测试

20.2 建dll库文件

21、获取骨干点集X值的变化趋势,及该变化趋势的 变化趋势

21.1 获取 变化趋势 

21.1.1 获取骨干点集中心x的变化趋势并可视化

21.1.2 获取激光最右边缘x的变化趋势并可视化

21.2 获取 变化趋势 的变化趋势

22、将图像 tmpMat 沿中心点逆时针旋转90度

23、只画出所有轮廓中最大的那个轮廓

24、提取骨干点集拓展

24.1 获取激光最右点集(骨干点集存入rightmost)

24.2  采用中心点与最右点的中心作为骨干(骨干点集存入rightmost)

工业视觉  二(25-52)

工业视觉需要时可抄的代码---持续更新 二(25-52)

目录

25、 拟合轮廓椭圆,去掉过宽的轮廓并画出剩余轮廓中最大那个

26、删除最小连通域(丽姐发我的)

26.1 第一种

26.2 第二种

27、获取直激光的ROI区域减少运算量

28、 删除 vector 的开头和末尾部分的 cv::Point(0, 0)无效点

29、 计算距离相关

29.1 计算两点间距离

29.2.1 计算点到直线的距离(两点式:不垂直于两个坐标轴)

输入一条线和一个点

输入线段两端点和一个点 

输入线段两端点和一个点(改良版)

29.2.2 计算点到直线的距离(KB,一般式表示直线)

直接计算点(x0,y0)到直线y=ax+b的垂直距离

29.3 获取两线段 间的最小距离(端点)

29.4 获取点到两线段的最小距离(到端点)

29.5 点是否超出图像范围

29.6 计算点到线段的距离(点到线段两端点的最小距离)

30、裁剪图像

30.1 利用ROI(自己封装好的)

30.2  利用 rowRange 和 colRange

31、获取最大内切圆(内切圆)

32、获取空间上两点间距离

33、直线检测后更新骨干点集

33.1 根据直线检测的结果画图并更新点集(封装好的接口)

33.2 直线检测更新点集后把空缺手动连上

34、获取骨干的斜率List

35、将斜率List转换成趋势trend,并获取其趋势

36、获取轮廓质心

37、 拟合直线并获取拟合的程度(点集到拟合处的直线距离的均值)

37.1 拓展:分别获取点集前后一段距离内的拟合程度

37.2 直线拟合并获取线拟程度(自己封装好的接口) 

37.2.1 线拟后获取与骨干点集对应的直线点集(size与bright_point.size()一致)

自己封装好的接口:

37.2.2 接上,获取位于直线点集右方的骨干点集

37.3 pair用法及每组坡口组都不同颜色显示(可视化)

37.3.1 pair:存坡口组及其在骨干点集中的对应下标

37.3.2 pair:获取坡口前后的点集的直线拟合程度

37.4 map用法 

37.5 list用法

37.6 auto类型用法

38、 快速排序 sort() 用法

39、已知double类型的趋势或斜率list,获取list中的众数

40、关于曝光值的接口

40.1 曝光值调节参考

41、 拟合椭圆 &外接矩形 &填充轮廓 并可视化(只保留一个轮廓)

42、已保留一个轮廓,补充最后保留轮廓上下一定区域内的 疑似缺掉断开的轮廓

43、 已知三点,求三角形面积

43.1 三维空间

43.2 二维

44、手动把骨干空缺处连接上并更新点集

45、获取满足像素骤变要求的高亮段

45.1 一行只保留一个高亮段(与上一行有效高亮段离得最近的那个)

46、根据已有直线算出斜率和倾斜角度并进行旋转,使原图保持垂直状态

获取直线旋转角度的其他方法 :(数学公式直接出来的和上面接口出来的结果经测试是相同的)

47、将图像上下分割成两张独立的小图

47.1 将裁剪后分别处理完的两张图又重新上下拼接起来

48、 两直线求交点

48.1 求两直线交点(注意:不可以与x轴平行)

48.2  判断两条线是否相交,若相交则求出交点和夹角

求两直线夹角(内角或外角的夹角角度)的第二种方法:

48.2.1 画夹角

48.2.2 画虚线

48.2.3 画箭头

49、图像处理+骨干

50、对区域内,找像卷积核的小窗体内均值最高的窗体的中心点

51、展示所得点位的效果图

52、 图像采用(左黑图覆盖-右裁剪)的形式去除干扰项

工业视觉  三(53-80)

工业视觉需要时可抄的代码---持续更新 三(53-80)

目录

53、 VS2015创建dll库 & 测试demo

拓展:拓展其他设置说明

53.1 VS2017 dll库调用其他库的API

53.2 在另一个工程的文件中使用 库a调用的库b 中的接口

53.3 dll库a 调用的库b 中的接口,但库b的头文集不暴露出去造成麻烦(类似53.2)

54、用pair记录初始坡口组在骨干点集中的下标并根据线拟程度筛选出最终坡口

55、图像左右翻转后再进入接口识别

56、角度相关

56.1 获取直线旋转角 ---> 46

56.2 获取两直线夹角 ---> 48.2

56.3 获取直线与Y轴的夹角(已知直线上两点)

57、 获取上下两头用作线拟的点集(按占比取样)

57.1 onlyTwoSides 只保留两边的点,按比例将点集的中间部分剔除,形成新点集

57.2 onlyMiddle 只保留中间部分的点,按比例将点集的头尾部分剔除,形成新点集

58、 线拟后获取直线位置的 linePointList

58.1 (获取直线点集封装成函数)根据线拟后的参数获取直线处的点集(直线点集与对应的骨干点集长度一致)

58.2 删除位于拟合出的直线左侧的点并更新骨干点集和直线所在点集

59、 已有线拟直线位置点集 linePointList, 获取位于其右侧的剩余点集 quantityPoint

59.1 根据 linearPnt得到位于两端的直线部分点集

60、将线拟后剩余的右侧点集quantityPoint分组,以便挑选合适的部分做对应处理

61、选位于中间最弯的圆弧部分的组用于找拐点(在右侧点集分割的组中找,记录组的下标)

62、删除末尾组中结尾y明显离太远的无效点 

63、删除圆弧组中两端的无效点(实际在直线区域上,但落进来了,此时就需删掉以免后面影响识别)

64、两直线求交点

64.2 获取内角角点

64.2 获取外角角点

65、反验算top往下bot往上更新至激光边界处

65.1 由两端往圆弧顶部x步进,出中心点做验证或优化,验证y1y2正确性,并,得到圆弧最高点midP

65.2 一端直线出现凹陷导致不与y轴平行的情况,将直线凹陷的那个点修正为另一端点对应的位置,验证x1x2正确性

66、将旋转90度后的图传入识别后,结果点转换回原来的

66.1 法一

66.2 法二

67、平均值过滤函数

67.1 原始拿到手时的版本

67.2 自己修改后的适应可用版本

67.2.1 int 版本

67.2.2 double版本 

调用示例:

67.2.3 将集群组也作为返回参数&增加集群后再次确认整理&改好算均值的bug

68、根据处理后的轮廓来只保留灰度图中的有效部分

69、获取圆弧上的点集(圆弧区域点集)

70、在循环里调用可动态地展示所得点集的过程图

71、VS无法使用断点时

72、try-catch异常处理(避免因函数接口崩溃而崩溃)

73、打印当前源文件的文件名以及源文件的当前行号

74、高曝光图找极细焊缝

74.1 自己写的

74.2 在LJ基础改的

74.2.1 返回单个结果点 版本

74.2.2 返回直线所在的结果点集 版本

75、解析文件名获取 ROI(x,y,w,h)

76、获取骨干区域每行的激光宽度并可视化

76.1 获取骨干区域每行的激光宽度 的趋势 并可视化

76.2 获取激光宽度并得到宽度中的众数

76.3 获取【骨干点集中心x】和【激光最右边缘x】的变化趋势 并可视化

76.4 直激光拼接极细焊缝找断开

阈值后骨干发现断开直接return

平滑激光宽度数据后处于宽度均值以上的,y方向上不相邻(即断开),即认为是坡口

76.5 单独只有获取骨干区域每行的激光宽度

77、数据平滑处理

77.1 三点线性平滑(已自行修正可用)

77.2 五点线性平滑:临近五个点取平均(已自行修正可用)

77.3 七点线性平滑

77.4 线性五点拟合去差值:临近五个点去掉最大值和最小值取平均

77.5 利用二次函数拟合平滑

77.5.1 五点二次平滑(利用二次函数拟合平滑)

77.5.2 七点二次平滑(利用二次函数拟合平滑)

77.6 利用三次函数拟合平滑

77.6.1 五点三次平滑(利用三次函数拟合平滑)

77.6.2 七点三次平滑(利用三次函数拟合平滑)(已自行修正可用)

78、将宽度高于均值的部分分组,以便后面选组找尖尖

79、从选中的组里找尖尖组

80、确定最终选中的尖尖组

80.1 拼接直激光:

80.2 圆管弧形激光:

工业视觉  四(81-100)

工业视觉需要时可抄的代码---持续更新 四(81-100)

目录

81、直接返回所在行数和函数等

82、缺陷检测

82.1 缺陷检测算法

82.2 获取多元模板图像(计算均值图像、差异图像、以及亮、暗阈值图像)

82.3 缺陷检测

83、已知结果点处的y,在骨干点集中获取与该y对应的点位

84、容器vector

84.1 容器vector中元素的去重

84.1.1 int

84.1.2 double

84.1.3 QString

84.2 判断vector的某一元素是否存在

84.2.1 int

84.3 两个vector求交集 / 是否有交集

84.3.1 int

84.3.2 double

84.4 两个vector求并集

84.4.1 int

84.5 vector中求众数  ---> 18

84.6 vector中求 [最大值] [最小值] 及其【下标】

85、根据要求在对应位置插入新字符串后得到新文件名InsertChar

86、根据圆弧不断连线获取yMid,即圆弧正上方最高处,得到圆弧最高点midP

86.1 两端直线中间夹圆弧

86.2 纯圆弧

87、111

88、利用 宏 减少get/set函数重复

89、已知点集 groovePnt,将其可视化并获取minX的点

90、已有线段两端点,将其向左侧平移,获取 过直线白点最多的位置

91、自动识别高曝光图是否有效(高曝光图与激光图一样则false)

92、对高曝光图处理并获取范围内的【每列像素list】并可视化

93、根据多列像素list得出一个总结性的像素list并可视化

94、通过矩形移动窗口获取曲线在窗口内的 差值最大的位置并可视化

94.1 通过矩形移动窗口获取曲线在窗口内的 低谷程度(左高到低谷到右高的变化程度)最大的位置

95、删除目录及其所有子文件、子文件夹

96、根据激光图名称自动解析出高曝光图名称

97、根据所存的tb下标对结果组去重/剔除两端偏离中心较远的无效组

97.1 结果组去重

97.2 剔除偏离中心较远的

98、大致得出平均每行激光宽度

99、坐标转换(二维转三维)

100、圆角矩形只保留圆角部分的点集(删除直线部分点集)

工业视觉  五(101-)

工业视觉需要时可抄的代码---持续更新 五(101-)

  • 8
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值