- 博客(216)
- 资源 (2)
- 收藏
- 关注
原创 使用Eigen库进行(X-Y-Z固定角坐标系)下的矩阵、RPY角、四元素之间的转换
固定一词指的是旋转是在固定的(不运动的)参考坐标系中确定的。也成翻滚角(Roll)、俯仰角(Pitch)、偏转角(Yaw).运行结果和输入结果一致,前提是输入要在合理范围内!
2023-06-09 11:37:16
24
原创 明度补正(基于OpenCV实现)
光源不足够稳定,不同时刻排出的图片的平均亮度不足够稳定时,可以采用明度补正的办法。我们往往需要一张理想的模板图作为标准的亮度水平,其余的图要往模板上尽可能的接近。
2023-05-20 23:32:59
39
原创 最小二乘least-squares拟合曲线(三次或多次)
基于最小least-squares去拟合出多次曲线,考虑到了所有的样本点,因此这种方法对噪声敏感,尤其是遇到较为明显的噪声时,曲线的形状易受干扰。
2023-05-07 23:11:20
55
原创 基于OpenCV(C++)实现的RANSAC随机抽样一致性的曲线拟合(二次)
这篇文章与其类似,只是从拟合直线变为拟合曲线(二次)。有时候只懂得拟合直线可能是不够的,甚至只拟合二次曲线都不一定能满足实际需求。但好在我们可以触类旁通,举一反三。对于学习算法的人,最重要的就是理解它的思想,久而久之形成自己的思想体系,以后遇到问题的时候就能在脑子里闪现出方案。活学活用四个字很简单,但做起来却是很难很难,跟做人一样,活到老学到老。
2023-04-04 23:11:17
486
原创 基于OpenCV实现的RANSAC随机抽样一致性直线拟合
该方法最早是由Fischler和Bolles提出的一种鲁棒估计方法,最早用于计算机视觉中位姿估计问题,现在已广泛应用于已知模型的参数估计问题中。其思想比较直观和容易理解,即可从坐标点中随机抽取两点,计算一条直线,然后判断所有的点与该直线的吻合程度,不断重复直到挑选出最好的。w为点集中内点的比例,一般可以在初始时设置一个较小值,如0.1,然后迭代更新;n为模型参数估计需要的最小点个数,直线拟合最少需要2个点。本文介绍基于ransac随机抽样一致性随机抽样一致性的直线拟合方法,涵盖一下的内容。
2023-03-16 20:12:26
170
原创 OpenCV中phase函数及其输出的角度
输出的四个角度分别为: 45(第一象限平分线) , 315(第四象限平分线) , 135(第二象限平分线) , 225度(第三象限平分线)。而c++中atan2函数是通过正切值返回弧度的,并通过判断x,y的正负决定象限,因此c++中atan2函数值域是从-Pi到Pi的。在图像坐标系 (图中XY)中:phase输出的角度范围为:0~360,顺时针旋转方向(来计算角度,计算精度大约为0.3弧度,当x,y相等时,angle为0。默认为false,即弧度,当置为true时,则输出为角度。phase函数根据函数。
2023-03-15 15:52:37
86
原创 VS2017中集成QT环境,Qt关键字下面出现红线,无法解析
可以看到,工程默认的附加包含目录已经含有Qt_INCLUDEPATH_,但是电脑上并没有Qt_INCLUDEPATH_这个环境变量。如果不想设置 Qt_INCLUDEPATH_环境变量,那么就在VS中添加附加包含目录。那么新建Qt_INCLUDEPATH_变量,然后重启VS即可。右键打开工程属性页。
2023-03-09 11:40:33
155
原创 如何在微软官网上下载旧版本的visual studio
4.到这里就可以点击下载自己想要的版本了。3.下拉到最后,找到“1.进入微软官网首页,2.下拉,直到找到“”,如下图,点击,进入下一界面。想在微软官网下载旧版本的VS.”,如下图,点击进入下一界面。
2023-03-01 23:59:28
1220
转载 Max Pooling和 Average Pooling的区别,使用场景分别是什么?
最大池化可以提取特征纹理, 最大池化提取边缘等“最重要”的特征平均池化可以保留背景信息,平均池化提取的特征更加smoothly当特征map中的信息都具有一定贡献的时候使用AvgPooling,例如图像分割中常用global avgpool来获取全局上下文关系,再比如网络走到比较深的地方,这个时候特征图的H W都比较小,包含的语义信息较多,这个时候再使用MaxPooling就不太合适了, 是因为网络深层的高级语义信息一般来说都能帮助分类器分类。
2023-01-29 16:17:48
485
原创 图像旋转任意角度及其后图中点坐标的对应变化
图像中有一个点P, 将图像旋转任意角度(默认旋转点为图像中心)后,求旋转后的图像?求原图中的点P在旋转后图像中的坐标?问题分为2大步去解决。1)得到旋转矩阵.主要是借助于getRotationMatrix2D算子。getRotationMatrix2D得到的矩阵为2行3列。2)计算旋转后图像的新大小,旋转后图像的宽高发生变化。此外,图像的中心位置也发生偏移,需要进行偏移量调整。
2023-01-28 14:17:58
271
原创 神经网络中常用的权重初始化方法及为何不能全初始化为0
在一个给定的区间[-r,r]内采用均匀分布来初始化参数。超参数r的设置可以按照神经元的连接数量进行自适应的调整。参数从一个固定均值(比如0)和固定方差(比如0.01)的高斯分布进行随机初始化。
2022-12-28 17:56:36
721
原创 Win10从零安装、训练、部署yolov5 6.x一条龙实战案例
Win10 64位;:英伟达GTX 1050TI(配置较低):pytorch 1.7.1(python 3.6),基于Anaconda环境.:包含3类案例,1) OpenCV DNN(C++ 、Python,使用CPU进行推理),若想通过 OpenCV DNN利用GPU进行推理,则必须编译支持CUDA的OpenCV库;本人 只有CPU版本的OpenCV 4.5.4,没有尝试CUDA版本的OpenCV推理。往往在工程部署中,设备端是没有GPU的,所以本人也不想侧重于GPU推理。
2022-12-25 21:46:05
371
1
转载 一文讲清楚FPN+PAN结构、SPP结构
FPN 高维度向低维度传递语义信息(大目标更明确)PAN 低维度向高维度再传递一次语义信息(小目标也更明确)深层的feature map携带有更强的语义特征,较弱的定位信息。而浅层的feature map携带有较强的位置信息,和较弱的语义特征。FPN就是把深层的语义特征传到浅层,从而增强多个尺度上的语义表达。而PAN则相反把浅层的定位信息传导到深层,增强多个尺度上的定位能力。
2022-12-20 15:42:47
2252
原创 什么是SPP网络
例如:最后一层特征图大小为6*6*10,(width,hight,channels),global average pooling就是将6*6大小的特征图平均采样为一个值,这样最后就输出1*10大小的特征向量,这种方式就只和通道数有关,而与特征图大小没有关系了。使用不同的size,stride,对全连接层前的卷积层进行不同池化大小的pooling,然后拼接,这样最终的输出一定是(p1*p1+p2*p2+…2)替换网络中的全连接层,对最后的卷积层使用global average pooling。
2022-12-20 14:53:22
868
原创 深度学习基础知识---梯度弥散 梯度爆炸
防止过拟合:在网络的训练中,BN的使用使得一个minibatch中所有样本都被关联在了一起,因此网络不会从某一个训练样本中生成确定的结果,即同样一个样本的输出不再仅仅取决于样本的本身,也取决于跟这个样本同属一个batch的其他样本,而每次网络都是随机取batch,这样就会使得整个网络不会朝这一个方向使劲学习。1)没有它之前,需要小心的调整学习率和权重初始化,但是有了BN可以放心的使用大学习率,但是使用了BN,就不用小心的调参了,较大的学习率极大的提高了学习速度。但如果数据的分布一直在变,学习就很难了。
2022-12-19 16:12:10
917
原创 关于在QT子线程中使用QTimer的几点体会
2)主线程发送信号后,让子线程去控制QTimer启动,但QTimer会奇怪的不启动(无法触发定时器timeout槽函数)。但可以在主线程里面去启动子线程的QTimer对象(要暴露出public接口),同样也可以在主线程里面去关闭子线程的QTimer对象。5)个人不太建议在QT子线程中使用QTimer做一些定时任务,操作起来不是很友好,尤其是在启动、退出、消息处理实时性把控等方面。3)在程序退出时,当子线程中的QTimer还在运行时,会出现错误,应该先关闭子线程中的QTimer。
2022-12-15 16:09:29
1017
原创 qt信号与槽连接的书写规范
在传递int,double,char,bool,float等类型的时候没问题,但是传递比如QList类,或者自定义的结构体、类等时,连接将会失败。3.信号和槽之间有参数传递,但是使用connect的时候在槽函数或者信号或者二者同时加入了形参,比如下面的两个connect,第一个连接因为有形参,不会连接成功。2.信号和槽之间存在参数传递,但是二者的参数数量或者类型不一致(信号里的参数数量可以多于槽函数里的参数数量,但是二者都有的参数,类型必须对应);5:connect函数书写不规范,以下2种方式是对的.
2022-12-12 14:28:32
327
转载 mAP@0.5与mAP@0.5:0.95的含义
在COCO数据集中,更关注预测框位置的准确性,AP值是针对多个IoU阈值的AP平均值,具体的就是在0.5 和0.95之间取10个IoU阈值(0.5、0.55、0.6 ..... 0.9、0.95)。目标检测问题中,算法通常输出一个预测框(bounding box)来标识检出目标的位置,要衡量这个预测框与目标的实际位置(ground truth)的准确度,可以使用IoU指标。我们如果把所有预测结果对样例进行排序,排在前面的是“最可能”的正例样本,以查准率为纵轴、查全率为横轴作图,得到一条”P-R曲线”。
2022-11-22 09:46:15
2302
原创 pytorch自定义图像分类训练+OpenCV部署实战项目案例
训练时:visdom等等插件,代码中需要什么包就执行对应的安装命令即可。模型部署及推理时:导出网络模型时安装onnx工具包、OpenCV4.5.4(C++部署)、VS2017(VS2019也可,VS2015没测试,应该也可以)
2022-11-11 22:16:26
1155
原创 程序日志模块的两种模式
程序员都知道程序的运行日志在不少时候都非常有用,利于排查、理清逻辑。一般而言,日志都按天生成,并且具备自动清理多少天以前的旧日志,避免无限增长占用磁盘。下图展示了2种日志模式。
2022-11-07 16:06:02
165
原创 使用OpenCV求解物体(轮廓)的旋转角度的案例
在本人早期的博客里面介绍了 3种不同的方式去求解图像(轮廓)的旋转角度。今天着重提一下使用PCA(Principal Component Analysis)对轮廓进行主成分分析,进而得出物体的旋转角度。PCA是机器学习里面进行数据降维的常用方法之一。假设你有一组2D点,如上图所示。每个维度都对应于您感兴趣的一个特性。在这里,有些人可能会说点是按随机顺序设置的。然而,如果看得更仔细,你会看到一个线性模式(用蓝线表示),这是很难忽略的。主成分分析的一个关键点是降维。降维是指减少给定数据集的维数的过程。
2022-10-31 10:31:31
968
原创 OpenCV实战案例之宽高度测量
实际项目中,很可能会遇到用视觉测量工件的高度、宽度(也可为直径)的情形,毕竟这类型也比较常见嘛!一般而言测量工件尺寸往往离不开物体的轮廓检测。提到轮廓就自然想到了边缘检测、二值化等一系列关联手段。
2022-10-26 13:47:09
1950
原创 基于OpenCV实现的多角度、多目标模板匹配项目实战案例
本案例采用NCC的匹配+金字塔(为了加速)思想,基于OpenCV实现的多角度、多目标模板匹配(不支持尺度不变)。若研究旋转+尺度不变性的匹配,请参考本人的《OpenCV实现多角度多尺度模板匹配(基于形状)》本案例提供代码(内含详细注释)+原始图像。
2022-09-14 17:04:38
3039
16
原创 Window 10下SQL Server的安装配置以及C++使用案例
参照下面这篇博客实现即可。里面提供了安装包下载方式(百度网盘有点慢)、安装及配置步骤。
2022-09-06 08:57:23
622
原创 HoughLines获取的角度说明
上图中,x/y分别为图像的X轴/Y轴(图像坐标系),HoughLines获取的是直线A与Y轴负方向的夹角(黄色箭头线顺时针旋转a度与直线A重合)。//theta为直线与Y轴负方向的夹角,以Y轴负轴为起始轴,逆时针旋转到直线的角度。//theta:弧度线条旋转角度( 0:垂直线;//极半径r:离坐标原点((0, 0)(也就是图像的左上角)的距离.Image必须是8位单通道图(可以使灰度图、二值图、边缘图等)Theta:角度分辨率,一般为CV_PI/180。Stn:(猜测)角度缩放。......
2022-08-17 16:35:34
233
原创 如何使用OpenCV在图像中抠出指定的颜色区域
我们往往需要在图像中抠出指定颜色的区域。在实际工况下这种指定颜色不是简单的纯色,往往难以单一的用R G B的某个范围值去确定。本文以PhotoShop为基准,在一副彩色图中按照提取指定范围内的HSV色彩空间。主要流程分为2步: 在PS中确定HSV的各自的范围--->转换值域后使用OpenCV提取颜色区域。......
2022-08-17 10:45:31
2871
原创 OpenCV实现多角度多尺度模板匹配(基于形状)
主要流程就是两步1.制作模板2.开始匹配(使用模板在搜索图像上进行匹配)制作模板对所有的模板进行特征提取,这边使用类似于canny边缘提取的算法来提取特征。开始匹配对搜索图像提取特征,将所有的模板在搜索图像上进行相似度计算,然后滑动窗口直到匹配完成。代码实现。三个主要的函数功能:制作模板(MakingTemplates),加载模板(LoadModel),匹配(Matching).........
2022-08-11 16:20:51
4452
5
原创 元器件正反(极性)检测案例
1.判断准则 元器件的中间有一条近似于盘子状的分割线,如果盘子开口是倒扣向下的,则为PASS, 如果盘子开口是向上的,则为FAIL. 2.算法步骤1)为节省运算时间,将原图的宽高均缩小一半。2)提取器件的轮廓。采用HSV过滤(在PhotoShop上先确定好H/S/V的上下界)、形态处理、轮廓查找+尺寸筛选3)求上述所得轮廓的最大内接圆。含圆心坐标与半径.4) 以圆心坐标为参照点,按照先验经验扣取出ROI。5)对ROI进行模糊滤波,与ROI原图进行作差处理。6...
2022-08-04 15:25:00
319
原创 基于OpenCV实现的图像拼接(配准)案例
-VS2015 C++-OpenCV 4.5.1-Windows 10 64位 Note: 两幅图像的拼接需要满足基本条件,一是图像本身要层次细节纹理丰富,不可单调重复(比如两张不同角度拍摄的棋盘网格图、重复单调的瓷砖墙/条纹等等是无法拼接的),二是两张图要有一定的重叠部分。1、对每幅图片进行特征点提取(AKAZE、sift、surf、ORB均可);2、对特征点进行描述和匹配;a、将一个点附近邻近点点采用K近邻算法归为一类点b、挑选出优秀的匹配点(good match);c、将匹配点连接在一起;3、进
2022-07-29 14:48:14
1788
1
原创 图像视角矫正实战案例--- 含透视变换矩阵(单应矩阵)/findHomography 与 getPerspectiveTransformd的区别
举个简单例子,在实际机器视觉场景中,由于安装误差,相机的光轴与被测基准平面之间往往不是严格的垂直关系。想靠机械加工去保证很高的垂直度,往往实现起来较为困难。由于上述的垂直度误差,那么一个标准矩形的物体在图像中可能是一个梯形,甚至不是梯形(对边皆不平行)。如下图所示这时候,为了能正常进行后续的图像处理及像素定位,我们需要做就需要视角矫正。需要求出当前拍摄图像与期望图像之间的变换关系(透视变换矩阵(单应矩阵)).............
2022-07-28 15:48:02
1224
Windows C++访问SQL SERVER数据库项目实战案例
2022-09-05
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人