自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(58)
  • 收藏
  • 关注

原创 QSerial 串口通信

简单记录一下使用Qserial模块实现Qt的串口通信,我使用的环境是VS+qt,因此需要在创建项目的时候勾选QSerial模块。提前准备:1、虚拟串口工具创建一组虚拟串口,我是COM2和COM3;2、串口调试助手用于和上位机进行信息交互;步骤:1、设计交互UI界面;2、查找可用串口(我省略了,直接开的虚拟串口);3、串口初始化 —— 打开串口、设置串口参数;4、在发送槽函数里面发送数据;5、在接收槽函数里面接收和显示数据;6、关闭串口,释放串口变量。代码:#pragma once

2020-08-18 11:22:34 993 1

原创 C++ 计算代码运行时间

在算法比较中,耗时是一个重要的指标。每次都要去搜别人的博客,今天摘抄一下askunix_hjh的博客,感谢博主。原文记录了三种办法,我选择了其中比较易懂的。GetTickCount是函数。GetTickCount返回(retrieve)从操作系统启动所经过(elapsed)的毫秒数,它的返回值是DWORD。#include<iostream> #include<Windows.h> using namespace std; int main() {

2020-08-05 15:15:42 330

原创 QStandardItemModel数据保存为excel文件

在Qt中可以使用MVC结构显示图像处理的结果数据,有时候需要将数据保存为excel文件,便于数据记录和分析。步骤:获取表格抬头;获取表格数据(注意用,和“\n”隔开);选择保存文件路径和格式;打开文件,写入数据;关闭文件。.csv格式文件可以使用excel文件打开,以“,”分列,以“\n”分行。代码:函数介绍:static QString getSaveFileName(QWidget *parent = Q_NULLPTR,//父窗口const QString &capt

2020-08-01 17:21:55 955

原创 qt designer UI设计简记

以前使用qt designer设计ui时,并不是很得心应手,慢慢积累了一些小技巧。简记步骤,便于以后查看。将若label空间用于显示内容,则可以设置背景颜色,方便布局选择可视化;使用Group Box空间进行大体全局布局;在每个Group Box中放入需要的控件;使用Spacers和Layouts, 分别对每个Group Box 进行小控件之间的局部布局;右键Group Box,选择布局中的水平或垂直布局进行Group Box中的自适应布局,可以通过拉伸Group Box测试里面的小控件布局是

2020-07-29 09:53:13 388

原创 单相机SDK引用错误解决

换了一台电脑,同样使用之前的相机SDK和代码,出现了很多错误,比如:BYTE未定义标识符、“ACCESS_MASK”:不明确的符号、“uInstance”未知重写说明符等。看了很多别人的博客,逐个击破,最终获取了图像,简单记录一下原因和解决方案。1、BYTE未定义标识符原因:头文件未引用。方法:#include <windows.h>2、“ACCESS_MASK”:不明确的符号原因:在winnt.h中也有一个cv的命名空间,与opencv的cv::ACCESS_MASK发生冲突。解

2020-07-28 10:39:05 708

原创 Q_OBJECT在子线程出错

世界上难以琢磨的不只是女生的心,还有代码的前后不一!以前在笔记本上适用qt多线程时,可以直接通过新建.cpp和.h文件,利用信号与槽连接主线程和子线程。但现在我用台式使用同样的软件环境就会Q_OBJECT报错。如图:从而导致无法在子线程定义信号和槽函数。(错误原因不明)解决方案:通过右键“项目名” -> 点击“类向导” -> “添加类” -> “完成”就可以了。在上图输入类名(自取),基类为:QObject#pragma once#include "qobject.h

2020-07-25 21:03:53 163

原创 Qt_按钮触发两次槽函数

以前使用qt creator的时候,可以直接右键转到槽构建槽函数,十分方便。void MainWindow::on_ptn_clicked(){ qDebug()<<"ptn"<<endl;}单击一次按钮,只触发一次槽函数后来使用vs2015+qt的时候,不能直接右键转到槽,但是可以通过命名相同格式来构建槽函数,但会触发两次槽函数。结合网上一些博主的笔记,做了如下尝试:1void test::on_ptn1_pressed() { cout <&l

2020-07-20 19:39:03 2509 1

原创 OpenCV_高提升滤波

对于某些图像锐化过程中,经典的sobel算子和canny算子等会提取到一些多余的边缘,高提升滤波可以增强图像边缘,通过增大局部灰度差异来增强对比度而,不影响图像整体对比度。步骤如下:1、平滑原图像2、用原图像减去平滑图像,该差值图像作为模板gmask(x,y)=f(x,y) - F(x,y)3、加权缩放后的模板加到原图像上,达到局部对比度增强的效果。g(x,y)= f(x,y) + k* gmask(x,y)通常,我们会在上式中包含一个权重系数k(k>=0)。当k=1时,称为非锐化掩蔽

2020-07-10 16:11:36 935

转载 zhang-Suen图像骨架提取(原理和代码)

转自东方fan的博客,感谢!该算法有四个条件,若满足,则该点置为0。或:其中(a)(b)的意思为:中心像素P1周围的目标像素(二值中的1)的个数之和在2和6之间。8邻域像素中,按顺时针方向,相邻两个像素出现0->1的次数。代码:void thinImage(Mat & srcImg) { vector<Point> deleteList; int neighbourhood[9]; int nl = srcImg.rows; int nc = srcI

2020-07-08 16:26:11 2729 2

原创 论文复现_芯片定位和引脚缺陷检测

首先感谢陈广锋同学的论文,若侵权,请联系删除。论文里面提出利用区域生长法获取引脚的总数及各个引脚主体部分的形心坐标及面积。通过与实际引脚总数进行对比, 判断是否存在引脚缺失的缺陷, 并和实际引脚的间距、面积的设定值进行对比, 当测定值超过设定值一定范围时, 认为该芯片存在引脚位置偏移以及高度偏移等缺陷。与作者不同之处在于我使用提取轮廓,构建掩膜图像的方式获取引脚的主体部分,其余部分均按照论文思路判别缺陷。步骤:图像预处理;提取轮廓,构建掩膜图像,获取引脚主体;引脚分割为4个ROI,排序,获取引

2020-06-21 20:05:31 2399 3

原创 OpenCV_电路板焊点的定位

论文中介绍的是点胶机的焊点定位,对于图像坐标和世界坐标,世界坐标和机器人坐标之间的标定由于设备限制没有完成,现记录焊点的定位。论文中的电路板电路和焊点比较简易,容易进行图像处理。步骤:获取图像、背景与前景目标的对比度尽量大;图像预处理、阈值分割;形态学开操作:去除电路部分,留下焊点;最小矩形拟合,获取焊点中心点。(应该比轮廓质心获取更快和简便)认识了一个新的标记函数:drawMarker()函数对于想要使用什么样的图形来标记点可以通过更改第四个参数的值选择,这里使用0—十字叉标记。代码

2020-06-15 16:40:41 1426

原创 论文复现_显示屏装配尺寸测量

读到一篇关于显示屏装配尺寸测量的文献,感谢肖敏同学的思路,若侵权请联系作者删除。该文献利用霍夫变换对边缘直线进行粗定位, 并依次找到直线边缘附近的所有点集, 利用最小二乘法进行拟合, 精确地检测出图像中的直线边缘,由此计算出液晶显示区域和外壳之间的距离。步骤:图像预处理;canny算子提取显示区域和外壳的边缘;霍夫直线检测粗定位,获取直线极坐标参数,由此筛选实际边缘线,计算直线点坐标;最小二乘法拟合直线点。通过点到直线的距离求平均,提高测量准确度和精度。重点记录:1、霍夫直线检测Op

2020-06-13 19:30:44 237

原创 双线性插值_亚像素边缘尺寸测量

读了好几篇关于亚像素边缘的博客,记录几点收获总结,若有错,还请读者朋友指正。亚像素边缘常见的方法主要是插值法和拟合法,如:近邻插值、双线性插值、三次插值、最小二乘法拟合等。实际并不存在亚像素边缘坐标,可以通过放大或缩小图像获得原图像的亚像素位置在新图像中的展示。尺寸测量时新图像的像素距离除以缩放比例即可获得原图像的亚像素精度的距离。感谢博主萱子子子的插值代码。本文使用霍夫直线检测,简单通过直线尺寸测量进行了验证。代码如下:#include<iostream>#include&l

2020-06-10 21:23:29 1926 1

原创 vs使用快捷键注销多行

敲代码调试的时候经常需要注释代码或者取消注释,查询结果记录如下:先选中代码:注释: Ctrl k c取消注释: Ctrl k u

2020-06-05 16:07:38 2212 1

原创 OpenCV_区域生长算法

算法步骤:创建一个空白的图像(全黑);将种子点存入vector中,vector中存储待生长的种子点;依次弹出种子点并判断种子点如周围8领域的关系(生长规则),相似的点则作为下次生长的种子点;设置结束条件;vector中不存在种子点后就停止生长。用于实现区域内具有相同特征的区域检测。代码:Mat RegionGrow(Mat mat, vector<Point2i> ptt, int th){ Point2i ptGrowing; //待生长点位置 int nG

2020-06-04 11:16:45 2554 3

原创 OpenCV_图像变换

经常要使用到图像的仿射变换和透视变换,今天简单贴一个代码,方便以后复制。仿射变化:1、直接通过中心和旋转角度计算变换矩阵2、通过对应三个点的输入计算变换矩阵透视变换:通过对应四个点的输入计算变换矩阵代码:#include<opencv2/opencv.hpp>#include<iostream>using namespace cv;using namespace std;int main() { Mat src = imread("D:/images/wr

2020-05-28 22:05:31 244

原创 论文复现_轮轴表面缺陷检测

今天读了一篇论文,关于轮轴柱面表面缺陷检测,柱面图像易受打光的影响导致图像亮度不均匀,因此不能直接使用阈值分割算法检测缺陷。使用两种办法可以改善算法,一:增加缺陷灰度值在图像中的占比;二:只用像素动态阈值分割,也就是每一个像素具有一个自适应的阈值。文中使用第二种方法,提到使用近邻域灰度值加权均值代替原灰度值,然后与原图像作差,获得阈值图,再进行分割,经试验证明,对于有缺陷和无缺陷的图像可以达到较高的准确率。近邻灰度值加权均值:代码:void filters(Mat &gray, Mat &

2020-05-28 16:52:35 394

原创 论文复现_轴承滚动体缺陷检测

今天看见一篇论文,关于轴承滚动体缺陷检测的,作者写的很详细,于是就跟着作者的方法介绍开始复现过程,若侵权请联系我删除。步骤:灰度增强阈值分割圆径向搜索构造掩模ROI分割连通域检测筛选其中有两点之前没有接触到,记录一下。1. 灰度增强作者使用公式:其中,r为原图像灰度,k改变对比度系数,t改变灰度阶级,c改变亮度值,可以提高目标与背景的对比度,然后使用阈值分割可以更好地分割前景。 //灰度增强 for (int i = 0; i < gray.cols; i++) {

2020-05-27 16:20:24 562

原创 OpenCV 直方图反向投影

直方图反投影有两种:1、模板匹配,通过建立模板的直方图和待检测图像直方图,通过检测块的直方图特征对比,实现模板在待检测图像上的匹配,与灰度特征模板匹配所不同的是,直方图反向投影可以“以小检大”,且可以减小尺度变换的影响;2、定位目标位置,在一张复杂的图像中,目标颜色特征占比大,那么其对应的直方图面积大,背景颜色特征占比小,则对应直方图面积小,根据面积概率大小,直方图反向投影过后被赋予新的灰度值,突出目标,便于分割。借鉴博主博客,记录第2种:两个API介绍:mixChannels(//用于将输入数

2020-05-26 20:09:24 231

原创 图像显著性检测

今天看论文接触到一个新词—显著性检测,刚开始没想到是一个专业词汇,查了博客发现是一种极好的目标检测算法,可用于目标检测和定位,目标ROI区域粗分割,继而进行目标图像处理。贴出原博客链接:OpenCV-python图像显著性检测算法据说几种算法中FT算法比较好,所以只跑了C++版的代码。**解释:**图像在频率域可以分成低频部分和高频部分。低频部分反映了图像的整体信息,如物体的轮廓,基本的组成区域。高频部分反映了图像的细节信息,如物体的纹理。显著性区域检测用到的更多的是低频部分的信息。在实际进行计算

2020-05-25 20:06:08 2152

原创 OpenCV_金字塔模板匹配

模板匹配是最简单易懂的图像匹配方法,可用于目标定位和分割,但由于其属于窗口滑动,基于灰度值统计的匹配,因此比较耗时。高斯金字塔模型可以将高分辨率的图像通过不断下采样,获取低分辨率的图像,构成图像金字塔。通过对低分辨率的图像匹配,可以减少时间,最后对坐标反推可获取原图目标的坐标。奉上网上下载代码代码://-----------------------------------【头文件包含部分】--------------------------------------- // 描述:包含程

2020-05-23 16:28:44 3184

原创 vs2015下include无法打开源文件

去年写好的代码,今天打开运行出现了错误。在vs2015+qt下,新建一个h和cpp文件在同目录下,用于子线程处理,在主线程里面include子线程h文件,出现错误没有该文件,无法打开源文件。解决:include里面加上h文件的绝对路径,问题解决。但是总觉得这不是最好的办法,希望有知道的大佬告知一下,谢谢。...

2020-05-19 15:15:09 1885

原创 PCL_NDT粗配准+ICP精配准

NDT配准速度较快但精度较低,ICP配准速度较慢但精度较高,因此可结合NDT和ICP算法,提高配准的精度和速度,先由NDT算法进行粗配准获取转换参数,再使用ICP算法结合参数进行精配准。下载了一篇代码如下,缺乏数据集运行,先mark下来,如果路过的大神有数据集,请分享一下,谢谢!#include <iostream>#include <pcl/io/pcd_io.h>...

2020-04-02 11:39:41 5802 13

原创 PCL_SAC_IA粗配准+ICP精配准

ICP配准对初始值依赖极大,因此,常采用特征点匹配获取粗匹配参数作为ICP精配准的初始值,可以极大提高匹配精度和速度。感谢博主peach_blossom代码,但没有数据集运行,先mark下来以后再验证。原文链接:https://blog.csdn.net/peach_blossom/article/details/78506184#include <pcl/registration/i...

2020-04-02 11:32:19 2766 3

原创 PCL_无序点云快速三角化

使用贪婪投影三角化算法对有向点云进行三角化,具体方法是先将有向点云投影到某一局部二维坐标平面内,再在坐标平面内进行平面内的三角化,再根据平面内三位点的拓扑连接关系获得一个三角网格曲面模型。贪婪投影三角化算法原理是处理一系列可以使网格“生长扩大”的点(边缘点),延伸这些点直到所有符合几何正确性和拓扑正确性的点都被连上。该算法的优点是可以处理来自一个或者多个扫描仪扫描得到并且有多个连接处的散乱点云。但...

2020-03-18 13:12:44 1233

原创 PCL_平面模型上构建凹(凸)多边形

步骤:滤波预处理,减小分割干扰;创建分割对象,获取平面模型参数;创建投影滤波对象,滤波点云投影到平面模型上,获取投影后点云;创建多边形投影对象,获取多边形边界上的点。代码:#include <pcl/ModelCoefficients.h>#include <pcl/io/pcd_io.h>#include <pcl/point_types.h&g...

2020-03-18 12:30:37 540

原创 PCL_最小二乘法点云平滑

不规则数据直接进行曲面重建会造成曲面不光滑或者漏洞,在不能进行额外扫描的情况下,可以通过数据重采样解决这一问题,重采样算法通过对周围数据点进行高阶多项式插值来重建表面缺失部分,也可以用来解决由多个扫描点造成“双墙”伪数据问题。代码:#include <pcl/point_types.h>#include <pcl/io/pcd_io.h>#include <p...

2020-03-17 11:31:07 3163

原创 PCL_点云分割_条件欧式聚类点云分割

使用类pcl::ConditionEuclideanClustering实现点云分割,与其他分割方法不同的是该方法的聚类约束条件(欧式距离、平滑度、RGB颜色等)可以由用户自己定义,即当搜索到一个近邻点时,用户可以自定义该邻域点是否合并到当前聚类的条件。代码:#include <pcl/point_types.h>#include <pcl/io/pcd_io.h>...

2020-03-17 11:04:24 2710 1

原创 PCL_点云分割_渐进式形态学滤波地面分割

在点云滤波中,可以基于模型进行平面、球、圆柱等进行分割,现采用渐进式形态学滤波进行地面分割。通过创建pcl::ProgressiveMorphologicalFilter滤波器对象和添加相关参数,如:增加滤波器的窗口大小和高差阈值将建筑、汽车和植被等非地面物体与地面进行分割。代码:#include <iostream>#include <pcl/io/pcd_io.h&gt...

2020-03-16 21:08:12 2649 8

原创 PCL_点云分割_基于法线微分分割

根据不同尺度下法向量特征的差异性,利用pcl::DifferenceOfNormalsEstimation实现点云分割,在处理有较大尺度变化的场景点云分割效果较好,利用不同支撑半径去估算同一点的两个单位法向量,单位法向量的差定义DoN特征。DoN算法:DoN特征源于观察到基于所给半径估计的表面法向量可以反映曲面的内在几何特征,因此这种分割算法是基于法线估计的,需要计算点云中某一点的法线估计。...

2020-03-09 17:10:41 2763 3

原创 PCL_点云分割_最小割算法

普遍应用于前背景分割,立体视觉、抠图等。GraphCuts图是在普通图的基础上多了2个顶点,这2个顶点分别用符号**”S”和”T”**表示,统称为终端顶点。其它所有的顶点都必须和这2个顶点相连形成边集合中的一部分。所以Graph Cuts中有两种顶点,也有两种边。第一种顶点和边是:第一种普通顶点对应于图像中的每个像素。每两个邻域顶点(对应于图像中每两个邻域像素)的连接就是一条边。这种边也叫n...

2020-03-09 15:50:15 759

原创 PCL_点云分割_基于颜色的区域生长分割

该算法与区域生长算法有两点不同第一:用颜色测试代替了法线测试,若两个相邻聚类的平均颜色相差较小,则将两个聚类合并;第二:利用合并算法来控制过分割或欠分割,检查当前聚类的点数量,若小于设定阈值,则将该聚类通邻近聚类合并。部分代码:(1)直通滤波; pcl::PassThrough<pcl::PointXYZRGB> pass; pass.setInputCloud(cloud...

2020-03-06 22:32:47 1606

原创 PCL_点云分割_基于区域生长分割

使用RegionGrowing类实现区域生长分割,算法的输出是一个聚类集合。算法的流程:设立空的种子点序列、空的聚类数组 -> 初始种子点加入种子序列 -> 搜索邻域点 -> 若领域点法线与当前种子点法线的夹角小于阈值,则加入当前区域 -> 领域点曲率值小于曲率阈值,则加入种子点序列 -> 删除当前种子点,利用新种子点生长,直到种子序列点被清空。利用曲率值从小到...

2020-03-06 16:23:38 1847 2

原创 PCL_点云分割_欧式聚类提取

使用EuclideanClusterExtraction类采用欧式聚类对三维点云组成的场景进行分割。部分代码说明:(1)对点云进行滤波重采样预处理,采用平面分割模型对点云进行分割处理,提取平面上的点集; pcl::VoxelGrid<pcl::PointXYZ> vg; pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_filter...

2020-03-06 14:57:45 1730 1

原创 PCL_点云分割_圆柱体模型分割

采用随机采样一致性估计从带有噪声的点云中提取一个圆柱体模型,程序流程如下:过滤掉远于1.5米的点估计每个点表面法线分割出平面模型(桌面)分割出圆柱体模型(水杯)代码说明:(1)定义对象pcl::PCDReader reader;pcl::PassThrough<PointT> pass;pcl::NormalEstimation<PointT, pcl::N...

2020-03-05 20:57:30 1721 3

原创 PCL_估计点云表面法线

法线估计类NormalEstimation调用程序内部执行以下操作:对点云P中的每个点p得到p点的最近邻元素计算p点的表面法线n检查n的方向是否一致指向视点,如果不是则翻转代码:#include <pcl/io/io.h>#include <pcl/io/pcd_io.h>#include <pcl/features/integral_image_...

2020-03-04 20:28:01 365

原创 PCL_两两点云获取设备自动标定

还没有自己测试,在郭浩老师的书中看见了这个例程,先记下来。应用RANSAC算法实现基于球型靶标的自动标定方法,连个深度摄像头获取的点云数据中检测并识别出各个圆球,检测识别出3个圆球后,拥有两组对应的3个坐标点,根据变换矩阵求解方程,估计出变换矩阵,实现双深度摄像头的标定。包括数据获取模块、直通滤波模块、平面检测及删除模块、圆球检测模块、刚体变换矩阵估计模块。(1)数据获取模块从不同方向采集...

2020-01-17 19:32:04 1050 3

原创 PCL_RANSAC随机采样一致性

一:RANSAC随机采样一致性流程:样本 -> 样本子集 -> 模型参数(最小方差估计算法)-> 样本点与模型偏差 -> (1)若小于阈值:局内点 -> 记录个数;(2)若大于阈值:局外点重复过程,迭代末尾依据期望的误差率、best_ninliers、总样本个数、当前迭代次数计算一个结束评判因子,其中inliers个数最多时对应的模型参数为最佳模型参数。缺点:...

2020-01-17 16:35:10 501

原创 PCL_Harris关键点提取

Harris算子是常见的特征检测算子,既可以提取角点,也可以提取边缘点,利用点云法向量信息。主要步骤:(1)创建Harris关键点估计对象,创建Harris_keypoints对象用于保存Harris关键点。注意point类型为:pcl::PointXYZI,必须包含强度信息;pcl::PointCloud<pcl::PointXYZI>::Ptr Harris_keypoint...

2020-01-16 19:18:20 1543 2

原创 PCL_SIFT关键点提取

SIFT:尺度不变特征变换主要步骤:(1)创建SIFT关键点估计对象,并输入点云;pcl::SIFTKeypoint<pcl::PointXYZ, pcl::PointWithScale> sift;//创建sift关键点检测对象pcl::PointCloud<pcl::PointWithScale> result;sift.setInputCloud(cloud...

2020-01-16 17:23:27 931

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除