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

工业视觉  一(1-28)

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

目录

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.2: 返回双点 

例子 5.3: 返回双点集

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

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

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

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、 拟合轮廓椭圆,去掉过宽的轮廓并画出剩余轮廓中最大那个

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

26.1 第一种

26.2 第二种

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

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

工业视觉  二(29-52)

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

目录

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

拓展:拓展其他设置说明

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-)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/37213.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

leetcode1985:找出数组中第k大整数中sorted的key=int用法

sorted(nums,keyint)[-k]中的keyint是: 使用 keyint,这通常意味着 nums 实际上可能包含字符串或其他可以转换为整数的数据类型,并且希望根据这些字符串或对象的整数值进行排序。 最后是从小到大,然后-k是从大到小第k个。

Python中相关软件安装

1. python安装 1.下载地址 https://www.python.org/downloads/2.选择安装版本 1. Anaconda安装 安装地址 -- 清华大学镜像站点 https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/查看anaconda是否安装成功 2.conda安装好后,将镜像源修改为清华大学的镜像…

Vue.js的V-show什么意思

在 Vue.js 中,v-show 是一个指令,它用于根据条件切换元素的 CSS 属性 display。具体来说,当 v-show 的条件为 true 时,元素会被设置为 display: block(或其他相关的值,比如 inline、inline-block 等&#x…

音频Balance源码总结

音频Balance源码总结 何为音频Balance? 顾名思义,Balance及平衡,平衡也就是涉及多方,音频左右甚至四通道,调节所有通道的音量比,使用户在空间内听到各个通道的音频大小不一,好似置身于真实环境…

vue 组件批量删除

element ui table表格中前面这个勾选框 对应 type"selection" 属性,绑定事件时selection-change,当你勾选全面的框时就会触发selection-change 对应的事件 绑定事件里面这样定义方法时,这个val 就是选中的时候那一行的数据,如下图…

CPS 网络术语

CPS(Cost Per Sale)是一种常见的网络营销模式,又称为按销售付费模式。这种模式通过支付佣金来激励推广者帮助商家销售产品或服务。 CPS营销模式主要应用在电子商务、旅游、教育等行业。以下是对CPS营销模式的详细解析: 1.…

一文帮你解决FP独立站引流难题

相信很多FP独立站商家都深受网站流量低推广难的困扰,想用通常的SEO、社交媒体运营等方式来引流吧,又容易审核不通过,就算能侥幸通过,在Facebook、X(原Twitter)、INS等社交软件上打广告来引流,万…

【数据分享】《中国县城建设统计年鉴》2015-2022

而今天要免费分享的数据就是2015-2022年间出版的《中国县城建设统计年鉴》并以多格式提供免费下载。(无需分享朋友圈即可获取) 数据介绍 在中国快速城镇化的进程中,县城作为连接城市与乡村的重要节点,其建设与发展受到了广泛关注…

breakcontinue(Python)

文章目录 一、break二、continue 一、break 当某一条件满足时&#xff0c;不再执行循环体后续步骤&#xff0c;直接退出循环 i 0 while i < 100:print(i)if i 10:breaki 1二、continue 当某一条件满足时&#xff0c;不再执行本次循环体中重复的代码&#xff0c;但进入…

高性价比 ESP32 网络收音机:OLED 显示+编码器控制 (源码开源)

摘要: 本文将详细介绍如何使用 ESP32 开发板制作一个功能完备的网络收音机。我们将涵盖硬件选择、软件架构、网络连接、音频流解码、用户界面设计等方面&#xff0c;并提供完整的代码示例和详细的解释&#xff0c;帮助您轻松构建自己的网络收音机。 关键词: ESP32, 网络收音机…

Scikit-Learn的认识

Scikit-Learn (sklearn) 简介 Scikit-Learn&#xff0c;通常简称为 sklearn&#xff0c;是一个基于 Python 的机器学习库。它建立在 NumPy、SciPy 和 Matplotlib 之上&#xff0c;提供了一系列简单高效的工具&#xff0c;用于数据分析和建模。Scikit-Learn 的目标是简单易用&a…

免交互和嵌入执行模式

目录 概念 语法格式 统计行数 赋值变量 修改密码​编辑往文件里添加内容 ​编辑​编辑引入变量 整体赋值​编辑 加引号不赋值变量 expect实现免交互 免交互设置密码 免交互切换用户 嵌入执行模式 添加用户并免交互设置密码 免交互登录 传参实现ssh 练习 概念 …

梦想CAD二次开发

1.mxdraw简介 mxdraw是一个HTML5 Canvas JavaScript框架&#xff0c;它在THREE.js的基础上扩展开发&#xff0c;为用户提供了一套在前端绘图更为方便&#xff0c;快捷&#xff0c;高效率的解决方案&#xff0c;mxdraw的实质为一个前端二维绘图平台。你可以使用mxdraw在画布上绘…

使用Token管理用户session

起因&#xff1a;单点登录问题&#xff0c;登录时访问的是tomcat1&#xff0c;访问获取用户数据时访问的是tomcat2&#xff0c;而用户的session信息在tomcat1上存储&#xff0c;tomcat2并不知道该用户来过&#xff0c;所以在获取个人信息时从session中获取不到数据&#xff0c;…

Django 日志配置解析

在 Django 中设置和使用日志是一个有效的方式来监控和调试应用程序。日志可以帮助你理解应用的运行状态&#xff0c;记录错误信息&#xff0c;以及跟踪重要的系统事件。Django 使用 Python 的标准 logging 模块来配置和管理日志。 目录 配置日志写日志日志中间件日志配置与日志…

复盘|接口自动化测试框架建设的经验与教训

为什么选择这个话题&#xff1f; 一是发现很多“点工”在转型迷茫期都会问一些自动化测试相关的问题&#xff0c;可以说自动化测试是“点工”升级的必经之路&#xff1b;二是Google一下接口自动化测试&#xff0c;你会发现很多自动化测试框架相关的文章&#xff0c;但是大部分…

VBA 批量变换文件名

1. 页面布局 在“main”Sheet中按照下面的格式编辑。 2. 实现代码 Private wsMain As Worksheet Private intIdx As LongPrivate Sub getExcelBookList(strPath As String)Dim fso As ObjectDim objFile As ObjectDim objFolder As ObjectSet fso CreateObject("Script…

CAN和CANFD数据写入.asc文件的dll

因为工作需要&#xff0c;需要做一些硬件不是CANoe的上位机&#xff08;比如说周立功CAN,NI-CAN&#xff09;&#xff0c;上位机需要有记录数据的功能&#xff0c;所以用Qt制作了一个记录数据的dll&#xff0c;方便重复使用&#xff08;因为有的客户指定了编程软件&#xff0c;…

Android高级面试_12_项目经验梳理

Android 高级面试-1&#xff1a;Handler 相关 问题&#xff1a;Handler 实现机制&#xff08;很多细节需要关注&#xff1a;如线程如何建立和退出消息循环等等&#xff09; 问题&#xff1a;关于 Handler&#xff0c;在任何地方 new Handler 都是什么线程下? 问题&#xff1a…

Redis主从复制、哨兵以及Cluster集群

1.Redis高可用 在web服务器中&#xff0c;高可用是指服务器可以正常访问的时间&#xff0c;衡量的标准是在多长时间内可以提供正常服务&#xff08;99.9%、99.99%、99.999%等等&#xff09;。 但是在Redis语境中&#xff0c;高可用的含义似乎要宽泛一些&#xff0c;除了保证提供…