【工控】线扫相机小结 第二篇

news2024/9/24 7:16:42

背景

上一篇中《线扫相机小结》中介绍了一些基础知识和注意事项,这一篇是对上一篇的进一步补充。
会介绍线扫相机的一些调试技巧。

如何在线调试?

我们知道,线扫相机不能像面阵相机一样实时的呈现图像,只能一行行的扫描,然后积累成一幅图。
如果是这样,那么线扫调试起来将会非常麻烦,因为只有扫描之后才能看清晰度。

其实,还有一个更好的办法,就是先关闭掉帧触发和行触发,然后相机和物体都禁止,物体最好是黑白相间的(比如条形码)
此时线扫相机会实时显示一行数据,并不停的累计这一行数据,然后你就会看到下图:
在这里插入图片描述
这样就可以实时的反应清晰度了,一般看黑色边缘,有两三个像素的浮动就说明清晰度差不多了。

这里给出海康相机,对应的设置代码

       /// <summary>
       /// 打开触发
       /// </summary>

       void SetLineSacanWorkMode()
       {
           if (device == null || GlobalData.Instance.myCameraEnum == MyCameraEnum.面阵)
           {
               return;
           }
           int result = MvError.MV_OK;
           //----------------打开行触发
           result = device.Parameters.SetEnumValueByString("TriggerSelector", "LineStart");
           if (result != MvError.MV_OK)
           {
               ShowErrorMsg("Set LineSacanDebug Fail!", result);
           }
           result = device.Parameters.SetEnumValueByString("TriggerMode", "On");
           if (result != MvError.MV_OK)
           {
               ShowErrorMsg("Set LineSacanDebug Fail!", result);
           }
           //行触发:触发源
           result = device.Parameters.SetEnumValueByString("TriggerSource", "FrequencyConverter");
           if (result != MvError.MV_OK)
           {
               ShowErrorMsg("Set TriggerSource Fail!", result);
           }


           //----------------打开帧触发
           result = device.Parameters.SetEnumValueByString("TriggerSelector", "FrameBurstStart");
           if (result != MvError.MV_OK)
           {
               ShowErrorMsg("Set LineSacanDebug Fail!", result);
           }

           result = device.Parameters.SetEnumValueByString("TriggerMode", "On");
           if (result != MvError.MV_OK)
           {
               ShowErrorMsg("Set LineSacanDebug Fail!", result);
           }

           //帧触发:触发源
           result = device.Parameters.SetEnumValueByString("TriggerSource", "Software");
           if (result != MvError.MV_OK)
           {
               ShowErrorMsg("Set TriggerSource Fail!", result);
           }
       }

	   //关闭触发
       void SetLineSacanDebugMode()
       {
           if (device == null || GlobalData.Instance.myCameraEnum == MyCameraEnum.面阵)
           {
               return;
           }
           int result = MvError.MV_OK;
           //----------------关闭帧触发
           result = device.Parameters.SetEnumValueByString("TriggerSelector", "FrameBurstStart");
           if (result != MvError.MV_OK)
           {
               ShowErrorMsg("Set LineSacanDebug Fail!", result);
           }
           result = device.Parameters.SetEnumValueByString("TriggerMode", "Off");
           if (result != MvError.MV_OK)
           {
               ShowErrorMsg("Set LineSacanDebug Fail!", result);
           }

           //----------------关闭行触发
           result = device.Parameters.SetEnumValueByString("TriggerSelector", "LineStart");
           if (result != MvError.MV_OK)
           {
               ShowErrorMsg("Set LineSacanDebug Fail!", result);
           }
           result = device.Parameters.SetEnumValueByString("TriggerMode", "Off");
           if (result != MvError.MV_OK)
           {
               ShowErrorMsg("Set LineSacanDebug Fail!", result);
           }
       }

需要注意的是,我们必须先设置 TriggerSelector 是 “FrameBurstStart” 还是 “LineStart”
在设置 TriggerMode 是 “On” 还是 “Off” 应为 “FrameBurstStart” 和
“LineStart” 的 TriggerMode 都需要关闭。 先指定TriggerSelector
的类型,才知道设置的是谁的TriggerMode。 一开始就设置 TriggerMode 是不行的。 具体看上面的代码。

为啥又畸变了?

在这里插入图片描述
可以看到,头和尾有明显的“拉伸”!!!
这种畸变很明显不是分频参数导致的,因为这个是局部畸变。 分频导致的是整体的畸变。

一开始找不到原因,是一开始的思维惯性,认定,是头尾畸变了(拉伸了),其实是是中间被“压缩”了,中间才是畸变的最厉害的。

我首先怀疑是速度的问题,就调慢的速度,结果发现,头尾“畸变”了(拉伸了)更多了。(其实是正常的部分更多了,应为此时处于加速阶段,速度较慢)。而由于 一开始的思维惯性,认定,是头尾畸变了。所以我就不再敢继续调慢速度。
但,实时是,需要调慢速度,让全部图片“拉伸”,而速度过快,会导致图片被压扁。

注意,这里和,分频器导致的拉伸和压扁并不一样

这个是应为,相机的成像速度(帧率)已经 跟不上 相机的移动速度(或者说是编码器的发送频率)。

相机的成像速度(帧率),一般和相机的类型有关,比如光口的成像就快,网口的成像就慢。这个是决定了相机帧率的上线。
还有就是曝光,如果曝光设置的过大,会导致成像时间变长,帧率变低。
所以,可以尝试降低曝光,来提高帧率。

不过,降低曝光可能导致图片亮度不足,此时可以加大灯光或调大光圈来弥补。

最终,为了保证图片的质量,我还是选择了降低相机的移动速度,避免相机帧率跟不上。

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

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

相关文章

谷歌的搜索语法

谷歌搜索常用语法 谷歌提供了多种搜索语法&#xff0c;帮助用户更精确地查找所需内容。以下是一些常用语法的介绍和示例&#xff1a; 1. 精确匹配&#xff1a;使用双引号 " " 在搜索内容时&#xff0c;如果需要精确匹配某个词组&#xff0c;可以将其放在双引号内。 …

BaseCTF 高校联合新生赛 Week1

Week1 Web [Week1] HTTP BaseCTF{4248fc3d-a280-4de0-b5e6-6ff0ecaa1fca} [Week1] 喵喵喵•&#xfecc;• [Week1] md5绕过欸 [Week1] A Dark Room [Week1] upload 什么过滤都没有&#xff0c;上传一句话木马即可 [Week1] Aura 酱的礼物 卡在SSRF那里&#xff0c; 我想用…

SpringCloud之二注册中心(Eureka)

一、Eureka概述 Eureka是Netflix公司开源的一个服务注册与发现的中间组件。 在微服务架构系统之中&#xff0c;我们经常提三个角色&#xff1a;注册中心 (Register)、服务提供者(Provider)、服务消费者(Consumer)。 1.注册中心&#xff1a;服务提供者可以将服务发布到注册中心…

亚马逊aws的弹性与可扩展性解析

欢迎来到雲闪世界。可以使用各种服务和工具在 AWS 上实现可扩展性和弹性。例如&#xff0c;AWS Application Auto Scaling 是一种可以自动调整容量以低成本实现出色应用程序性能的服务。这允许轻松设置跨多个服务的多个资源的应用程序扩展。让我们来谈谈弹性和可扩展性之间的区…

数据结构基础详解(C语言): 树与二叉树的基本类型与存储结构详解

文章目录 1.树2.二叉树2.1 二叉树的基本概念2.2 满二叉树2.3 完全二叉树2.4 二叉排序树2.5 平衡二叉树 3.二叉树的存储结构3.1 二叉树的顺序存储3.2 二叉树的链式存储 1.树 树的基本概念 结点的度&#xff1a;指该结点的分支个数&#xff0c;如结点A的度为2 树的度&#xff1a;…

DHU 二维数组 暗恋

思路及代码 蛮力算法 验证是否是正方形的方法是简单的 但是蛮力下来写的不优雅 第一版超时了&#xff0c;第二版改了一点点&#xff0c;把一个循环换成了加加减减 #include<iostream> using namespace std;int main(){ //input R,C int 1< <200 //input R*C矩阵…

ceph-rgw zipper的设计理念(1)

0.前言 RGW在ceph存储中的主要作用是提供S3和Swift的协议访问支持。Zipper工作主要是将RGW分为协议部分和后端部分。协议部分还是支持S3和Swift协议&#xff0c;包括身份认证、协议参数解析和op操作解析等等&#xff1b;后端部分主要是对接不同的存储&#xff0c;比如rados&am…

利用OpenCV根据图片识别环境的亮度

一、前言 在当代数字化转型的浪潮中&#xff0c;计算机视觉技术无疑占据了举足轻重的地位&#xff0c;其应用范围之广&#xff0c;影响力之深&#xff0c;已成为推动社会进步的关键力量之一。而OpenCV&#xff0c;作为计算机视觉领域的佼佼者&#xff0c;凭借其卓越的性能与广…

强推!必看!!由中国信通院发布的汇聚99个大模型优秀应用案例集!附219页PDF文件下载

2024 年是大模型深入赋能千行百业&#xff0c;融入实体经济&#xff0c;助力科技创新的一年。截至今年5月&#xff0c;我国国产大模型的数量已经超过 300个&#xff0c;预示着大模型在各行业场景的创新应用和深度拓展&#xff0c;对培育新质生产力、高水平赋能新型工业化、推动…

第100+23步 ChatGPT学习:概率校准 Sigmoid Calibration

基于Python 3.9版本演示 一、写在前面 最近看了一篇在Lancet子刊《eClinicalMedicine》上发表的机器学习分类的文章&#xff1a;《Development of a novel dementia risk prediction model in the general population: A large, longitudinal, population-based machine-learn…

java中超级重要的SPI机制

SPI机制是理解各个框架集成的重要思想&#xff0c;只用理解了SPI才能理解框架的集成和扩展。直观的就是SPI机制可以让你更好的理解springboot集成各个扩展。 废话不多说&#xff01;&#xff01; 1.什么是spi机制&#xff1f; Spi机制是java提供的一种服务发现机制&#xff0…

企业常用的10款主流图纸加密软件排行榜|企业图纸防泄密

图纸是企业的重要资产&#xff0c;其安全性直接关系到企业的核心竞争力。下面为大家介绍10款主流的图纸加密软件&#xff0c;每款软件都有其独特的功能和优势&#xff0c;帮助企业有效防止图纸泄密。 1. 安秉图纸加密软件 安秉图纸加密软件是一款专为企业用户设计的图纸加密解…

全球石油巨头哈里伯顿因网络攻击被迫关闭系统

美国能源服务巨头哈里伯顿公司在周五向联邦监管机构提交的文件中表示,在本周遭受网络攻击后,该公司主动关闭了某些系统以“帮助保护它们”。 该公司在提交给美国证券交易委员会的文件中表示,周三该公司获悉“未经授权的第三方获得了其系统某些部分的访问权限”,并正在与外…

如何开启让设备获取到IPv6?

前言 现在许多小伙伴拉的宽带基本上都是光猫进行拨号的。这个就导致很多小伙伴不知道如何让设备获取IPv6。 但好像还有小伙伴分不清光猫拨号和光猫桥接的区别&#xff0c;其实它们的区别就在于让设备直连光猫的网口或者光猫的Wi-Fi&#xff0c;就会出现两种情况&#xff1a; …

实战派六西格玛:培训只是热身,应用才是关键!

在当今竞争激烈的市场环境中&#xff0c;六西格玛作为一套卓越的质量管理策略与工具&#xff0c;其影响力已远远超越了单纯的制造领域&#xff0c;渗透至各行各业的运营管理之中。然而&#xff0c;许多企业在追逐六西格玛光环的过程中&#xff0c;却常常偏离了其核心轨道&#…

中国全球投资追踪相关数据(2005-2023年)

中国全球投资追踪的相关数据可以为了解中国在全球范围内的投资活动提供重要视角。根据美国企业研究所&#xff08;American Enterprise Institute&#xff0c;AEI&#xff09;编制的《中国全球投资追踪》数据库&#xff0c;该数据库详细追踪了2005年至2023年间中国的海外直接投…

wx.updateAppMessageShareData 自定义分享内容安卓无效

记录wx.updateAppMessageShareData 自定义分享内容安卓无效 bug&#xff0c;主要是因为微信公众平台要配置分享的链接域名。 情况微信公众号使用wxjsdk后分享api全都注入成功&#xff0c;自定义分享内容时ios正常安卓分享出去的是当前页面的url。 主要原因在于你自定义这个分享…

在linux 中如何将.c 文件转换为可执行文件

目录 一、引言 二、准备工作 三、编译单个.c 文件 1.预处理 2.编译 3.汇编 4.链接 四、编译多个.c 文件 五、调试和优化 六、总结 一、引言 在 Linux 环境下进行 C 语言编程时&#xff0c;将 .c 文件转换为可执行文件是一个关键的步骤。这个过程涉及到使用编译器和一…

携程:从MySQL迁移OceanBase的数据库发布系统实践

作者简介&#xff1a;杨晓军 现就职于携程的数据库团队&#xff0c;主要负责携程数据库的研发与管理&#xff0c;专注于提升数据库的稳定性。 自分布式关系型数据库OceanBase开源以来&#xff0c;携程已经在线上环境中进行了广泛的应用&#xff0c;取代了原先以MySQL为主力的业…

虚幻5|技能栏优化(1)---优化技能UI,并添加多个技能

一.添加多一个技能格子并进行初始化清楚 1.打开技能UI把原先的事件构造后面的蓝图&#xff0c;全部选中&#xff0c;右键创建一个函数&#xff0c;命名为初始化 2.添加以下两个蓝图&#xff0c;用于清楚技能格子内容 2.在之前&#xff0c;事件构造后面的蓝图&#xff0c;不需…