常用直线检测算法

概述

在计算机视觉领域,我们经常需要做一些特殊的任务,而这些任务中经常会用到直线检测算法,比如车道线检测、长度测量等。

– 资料

直线检测算法汇总_技术挖掘者的博客-CSDN博客_直线检测算法

直线检测算法博文中缺失的几个源码(Hough_line、LSD、FLD、EDlines、LSWMS、CannyLines、MCMLSD、LSM)_昊虹AI笔记的博客-CSDN博客_lsm直线检测算法

Hough_line直线检测算法

Hough变换是一个比较有名的计算机视觉处理算法,该算法可以用来做很多的任务,常用的任务包括直线检测、圆检测、椭圆检测等,下面我们将对该算法进行简单的分析并进行代码实战。

– Hough_line实现步骤

  • 步骤1-首先,它创建一个二维数组或累加器(用于保存两个参数的值),并将其初始设置为零;

  • 步骤2-用r来表示行,用θ来表示列;

  • 步骤3-数组的大小取决于你所需要的精度。假设您希望角度的精度为1度,则需要180列(直线的最大度数为180);

  • 步骤4-对于r,可能的最大距离是图像的对角线长度。因此,取一个像素精度,行数可以是图像的对角线长度。

– cv2.HoughLines函数

HoughLines(image, rho, theta, threshold[, lines[, srn[, stn[, min_theta[, max_theta]]]]])

image参数表示边缘检测的输出图像,该图像为单通道8位二进制图像。

rho参数表示参数极径 r 以像素值为单位的分辨率,这里一般使用1像素。

theta参数表示参数极角の以弧度为单位的分辨率,这里使用1度。

threshold参数表示检测一条直线所需最少的曲线交点。

lines参数表示储存着检测到的直线的参数对 (r,の)的容器 。

srn参数、stn参数默认都为0。如果srn = 0且stn = 0,则使用经典的Hough变换。

min_theta参数表示对于标准和多尺度Hough变换,检查线条的最小角度。

max_theta参数表示对于标准和多尺度Hough变换,检查线条的最大角度。

– Python代码实现

注:

① 这个算法仅能检测比较简单的场景,如作文本格子这种,对复杂场景效果很差。。
② 调试可以通过调试Canny参数和HoughLines参数。

③ 该算法基本上能够检测出图中的直线,但是检测的结果并不是很好,有很多重复和漏检的情况。除此之外,该算法最大的缺点就是需要根据图片去调节参数,关键的参数是lines = cv2.HoughLines(edges,1,np.pi/180, 200) 中的200,该值设置的越大图片中检测出来的直线数量会越少,你需要根据你自己的测试场景进行调节。

# coding=utf-8
# 导入相应的python包
import cv2
import numpy as np'''
直线检测 - Hough_line直线检测算法
代码来源:https://blog.csdn.net/WZZ18191171661/article/details/101116949注: 
① 这个算法仅能检测比较简单的场景,如作文本格子这种,对复杂场景效果很差。。
② 调试可以通过调试Canny参数和HoughLines参数。
③ 该算法基本上能够检测出图中的直线,但是检测的结果并不是很好,有很多重复和漏检的情况。除此之外,该算法最大的缺点就是需要根据图片去调节参数,关键的参数是lines = cv2.HoughLines(edges,1,np.pi/180, 200) 中的200,该值设置的越大图片中检测出来的直线数量会越少,你需要根据你自己的测试场景进行调节。'''# 读取输入图片
img = cv2.imread('imgs/pi.png')
cv2.imshow("img", img)
# 将彩色图片灰度化
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 使用Canny边缘检测
edges = cv2.Canny(gray, 50, 200, apertureSize=3)
# 进行Hough_line直线检测
lines = cv2.HoughLines(edges, 1, np.pi / 180, 200)
print(lines)
# 遍历每一个r和theta
for i in range(len(lines)):r, theta = lines[i, 0, 0], lines[i, 0, 1]# 存储cos(theta)的值a = np.cos(theta)# 存储sin(theta)的值b = np.sin(theta)# 存储rcos(theta)的值x0 = a * r# 存储rsin(theta)的值y0 = b * r# 存储(rcos(theta)-1000sin(theta))的值x1 = int(x0 + 1000 * (-b))# 存储(rsin(theta)+1000cos(theta))的值y1 = int(y0 + 1000 * (a))# 存储(rcos(theta)+1000sin(theta))的值x2 = int(x0 - 1000 * (-b))# 存储(rsin(theta)-1000cos(theta))的值y2 = int(y0 - 1000 * (a))# 绘制直线结果cv2.line(img, (x1, y1), (x2, y2), (0, 255, 0), 2)
# 保存结果
# cv2.imwrite('test3_r.jpg', img)
cv2.imshow("result", img)
cv2.waitKey(0)

效果:
在这里插入图片描述

HoughP_line

HoughP_line是Hough_line算法的改进版,具有更快的速度和更好的效果。

– cv2.HoughLinesP函数

HoughLinesP(image, rho, theta, threshold[, lines[, minLineLength[, maxLineGap]]])

image参数表示边缘检测的输出图像,该图像为单通道8位二进制图像。

rho参数表示参数极径 r 以像素值为单位的分辨率,这里一般使用 1 像素。

theta参数表示参数极角の以弧度为单位的分辨率,这里使用 1度。

threshold参数表示检测一条直线所需最少的曲线交点。

lines参数表示储存着检测到的直线的参数的容器,也就是线段两个端点的坐标。

minLineLength参数表示能组成一条直线的最少点的数量,点数量不足的直线将被抛弃。

maxLineGap参数表示能被认为在一条直线上的亮点的最大距离。

– Python 代码

① 对于复杂场景,效果比Hough_line稍好,但好的有限
② 对某一特定场景,也是可以通过调试Canny和HoughLinesP的参数来达到更好的效果,主要是HoughLinesP

HoughLinesP不仅使用起来比较方便,基本上不需要进行调节参数;除此之外,该算法能够获得更好的直线检测效果。因此,当你想用Hough直线检测算法,建议你优先使用HoughP_line算法。

# coding=utf-8
# 导入相应的python包
import cv2
import numpy as np
'''
直线检测-HoughP_line,其是Hough_line的改进版
代码来源:https://blog.csdn.net/WZZ18191171661/article/details/101116949注:
对于复杂场景,效果比Hough_line稍好,但好的有限
对某一特定场景,也是可以通过调试Canny和HoughLinesP的参数来达到更好的效果,主要是HoughLinesP
'''# 读取输入图片
img = cv2.imread('imgs/image205.jpg')
cv2.imshow("img", img)
# 将彩色图片灰度化
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 使用Canny边缘检测 
edges = cv2.Canny(gray, 50, 200, apertureSize=3)
# 进行Hough_line直线检测
lines = cv2.HoughLinesP(edges, 1, np.pi / 180, 80, 30, 10)# 遍历每一条直线
for i in range(len(lines)):cv2.line(img, (lines[i, 0, 0], lines[i, 0, 1]), (lines[i, 0, 2], lines[i, 0, 3]), (0, 255, 0), 2)
# 保存结果
# cv2.imwrite('test3_r.jpg', img)
cv2.imshow("result", img)
cv2.waitKey(0)

结果:
在这里插入图片描述

LSD直线检测算法

LSD也是opencv中集成的一个直线检测算法,该算法的直线检测效果优于Hough算法,而且具有较好的检测速度,推荐使用。

– LSD算法简介

LSD快速直线检测算法是由Rafael Grompone、Jeremie Jackbowicz、Jean-Michel Morel于2010年发表在PAMI上的文献《LSD:a Line Segment Dectctor》中提出的,该算法时间复杂度较霍夫变换低。LSD算法通过对图像局部分析,得出直线的像素点集,再通过假设参数进行验证求解,将像素点集合与误差控制集合合并,进而自适应控制误检的数量 。 一般来说,要检测图像中的直线,最基本的思想是检测图像中梯度变化较大的像素点集,LSD算法也正是利用梯度信息和行列线(level-line)来进行直线检测的。

– Python代码

① createLineSegmentDetector在4.0版本过后就已经被删除了,若要使用,需要低版本的opencv

② 就是opencv4里删除了LSD,可以用FastLineDetector来代替,具体实现的话我记得官网api里有例子参考。OpenCV: cv::ximgproc::FastLineDetector Class Reference

③ 若要使用LSD,可以用pylsd – pip install pylsd – LSD-OpenCV-MATLAB/pylsd at master · primetang/LSD-OpenCV-MATLAB · GitHub

需要说明的是原opencv中的LSD算法具有3中不同的模式,具体的模式如下图所示,默认情况下使用模式2(即1),但是经过测试我发现模式1(即0)通常输出的效果会更好一些,具体的情况需要你根据你的场景进行分析。

# coding=utf-8
import cv2
import numpy as np# 读取输入图片
img0 = cv2.imread("imgs/image9.jpg")
# 将彩色图片转换为灰度图片
img = cv2.cvtColor(img0,cv2.COLOR_BGR2GRAY)# 创建一个LSD对象
## createLineSegmentDetector在4.0版本过后就已经被删除了,若要使用,需要低版本的opencv
## 如:pip install opencv-python==3.1.0.5
lsd = cv2.createLineSegmentDetector(0)
# 执行检测结果
dlines = lsd.detect(img)
# 绘制检测结果
for dline in dlines[0]:x0 = int(round(dline[0][0]))y0 = int(round(dline[0][1]))x1 = int(round(dline[0][2]))y1 = int(round(dline[0][3]))cv2.line(img0, (x0, y0), (x1,y1), (0,255,0), 1, cv2.LINE_AA)# 显示并保存结果
# cv2.imwrite('test3_r.jpg', img0)
cv2.imshow("LSD", img0)
cv2.waitKey(0)
cv2.destroyAllWindows()

– pylsd使用代码

import cv2
import numpy as np
import os
# from pylsd import lsd
from pylsd.lsd import lsd
fullName = 'imgs/image9.jpg'
folder, imgName = os.path.split(fullName)
src = cv2.imread(fullName, cv2.IMREAD_COLOR)
gray = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY)
lines = lsd(gray)
for i in range(lines.shape[0]):pt1 = (int(lines[i, 0]), int(lines[i, 1]))pt2 = (int(lines[i, 2]), int(lines[i, 3]))width = lines[i, 4]cv2.line(src, pt1, pt2, (0, 0, 255), int(np.ceil(width / 2)))
cv2.imwrite(os.path.join(folder, 'cv2_' + imgName.split('.')[0] + '.jpg'), src)

– lsdCPP实现

LSD-OpenCV-MATLAB/pylsd/source at master · primetang/LSD-OpenCV-MATLAB · GitHub

FLD直线检测算法

– FLD算法简介

FLD直线检测算法是在该论文中被引入的,该论文中尝试着使用直线特征来代替原始的SURF点特征进行建筑物识别。与点特征进行相比,线特征具有更容易发现和更好的鲁棒性,线特征基本上不会受到光照、遮挡、视角变化的影响。线特征比点特征更好一些。

– Python代码

# coding=utf-8
import cv2
import numpy as np
'''
直线检测 - FLD直线检测
基本上可以检测出图中所有的直线,和LSD的性能类似,比hough系列效果好多了
'''# 读取输入图片
img0 = cv2.imread("imgs/image9.jpg")
cv2.imshow("img", img0)
# 将彩色图片转换为灰度图片
img = cv2.cvtColor(img0,cv2.COLOR_BGR2GRAY)# 创建一个LSD对象
fld = cv2.ximgproc.createFastLineDetector()
# 执行检测结果
dlines = fld.detect(img)
# 绘制检测结果
# drawn_img = fld.drawSegments(img0,dlines, )
for dline in dlines:x0 = int(round(dline[0][0]))y0 = int(round(dline[0][1]))x1 = int(round(dline[0][2]))y1 = int(round(dline[0][3]))cv2.line(img0, (x0, y0), (x1,y1), (0,255,0), 1, cv2.LINE_AA)# 显示并保存结果
#cv2.imwrite('test3_r.jpg', img0)
cv2.imshow("FLD", img0)
cv2.waitKey(0)
cv2.destroyAllWindows()

结果:
在这里插入图片描述

— 运行报错 - no attribute ‘ximgproc’

Traceback (most recent call last):File "/d/pyProjects/tests000/test3.py", line 11, in <module>fld = cv2.ximgproc.createFastLineDetector()
AttributeError: module 'cv2.cv2' has no attribute 'ximgproc'

原因:就是CV2的库冲突了,安装了多个,只需要这么操作就可以了.

解决1(成功):

pip uninstall opencv-contrib-python opencv-python
pip install opencv-contrib-python==4.1.2.30 -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com

EDlines直线检测算法

– EDlines算法简介

EDlines直线检测算法是在《EDLines: A Real-time Line Segment Detector with a False Detection Control》中提出的。本文提出了一个快速、无参数的线段检测器,命名为EDLines (Akinlar and Topal, 2011),它产生强大的和准确的结果,比最快的已知线段检测器速度更快,达到11倍;换句话说,the LSD by Grompone von Gioi et al. (2008a,b, 2010). 我们的探测器还包括一个线的验证步骤定于亥姆霍兹原理Helmholtz principle (Desolneux et al., 2008),这让它控制错误检测的数量。**EDLines得到的结果,我们看到的是,LSD非常相似,有所有主要的线段检测,并有极少数误报。此外, EDLines运行实时以炫目的速度为9.45毫秒,约10倍的速度比LSD对给定的图像。**

– EDlines算法实现步骤

  • 步骤1-首先,给定一个灰度图像,运行新的边缘检测、边缘绘制(ED)算法,产生一套干净的,像素相邻的链,我们称之为边缘。边缘线段直观地反应对象的边界。

  • 步骤2-然后,利用直线度准则,即最小二乘直线拟合法,从生成的像素链中提取线段。

  • 步骤3-最后,线的验证步骤定于亥姆霍兹原理Helmholtz principle (Desolneux et al., 2008; Grompone von Gioi et al.,2008a)是用来消除虚假线段的检测。

– C++代码

https://github.com/mtamburrano/LBD_Descriptor

下面是基于上面的版本做的一点应用:

https://github.com/XuefengBUPT/LBD_and_LineMatching

1)该算法能获得和LSD类似的检测结果;2)该算法抑制了一部分小的误检的直线;3)该算法具有更快的运行速度,是LSD的10倍左右。

待测试

LSWMS直线检测算法

– LSWMS算法简介

LSWMS是一个直线检测算法。本文介绍了一种精确且实时的直线检测方法。以前的直线检测方法都没有使用到图像场景的先验知识,因而不需要对输入的参数进行微调。该算法在检测精度和检测速度之间进行了折中,文中使用了一个高效的采样方法来进行加速处理,然后,文中使用一种快速的直线增长算法基于bresenham算法用改进的mean-shift算法提供精确的线段,同时保持稳健对抗噪音。测试了该策略的性能对于各种各样的图像,将其结果与流行的最新线段检测方法。结果表明,我们的建议优于这些工作同时考虑了结果和处理速度。

– C++ 代码

GitHub - marcosnietodoncel/lswms: Line Segment Weighted Mean-Shift

待测试

CannyLines直线检测算法

– CannyLines算法简介

CannyLines算法在《》中被提出。本文提出了一种鲁棒的线段检测算法,有效地检测出输入图像中的线段。首先,提出了一种无参数canny算子cannypf,通过自适应地设置传统canny算子的低阈值和高阈值,从输入图像中稳健地提取边缘映射。其次,提出了直接从边缘地图中提取共线点簇的有效像素连接和分割技术,并基于最小二乘法对初始线段进行拟合。第三,通过有效的扩展和合并,生成更长、更完整的线段。最后,根据helmholtz原理对检测到的所有线段进行了验证,该原理同时考虑了梯度方向和幅度信息。在一组有代表性的图像上的实验结果表明,与常用的两种线段检测器lsd和edline相比,我们提出的cannyline线段检测器能够提取出更有意义的线段,特别是在人造场景中。

– Python代码

GitHub - Gofinge/PyCannyLine: CannyLine Python Version

– C++ 代码

GitHub - Gofinge/cannyline-pybind: The repo is modified from the source code of CannyLine. It provides support for pybind to make it available for python.

MCMLSD直线检测算法

– MCMLSD算法简介

MCMLSD算法出自于该论文。论文中提出了一个融合两者优点的概率算法。在第一阶段,使用全局概率hough方法。在第二阶段,在图像域中分析每个检测到的行,以定位在霍夫图中生成峰值的线段。通过将搜索限制在一条直线上,线段的分布线上的点序列可以被建模为马尔可夫链和概率最优标签使用标准动态规划算法精确计算,在线性时间内。马尔可夫假设同时也产生了一种直观的排名方法,它使用估计期望值的边际后验概率线段上正确标记的点的数目。评估由此产生的马尔可夫链边缘线段检测器(mcmlsd)我们开发并应用了一种新的定量方法控制分段不足和分段过量的评估方法。在YorkUrbanDB数据集的评价结果表明,所提出的MCMLSD方法优于以相当大的优势达到最先进水平。

– C++代码

https://github.com/Raitoning/MCMLSD-CPP/tree/develop/src

待测试

LSM直线检测算法

– LSM算法简介

LSM算法不仅仅是一个直线检测算法,同时也是一个直线合并算法。论文中提出了一种合并这些断开的线段的算法,以恢复原始的感知准确的线段。该算法根据角度和空间接近度对线段进行分组。然后将每组中满足新的自适应合并准则的线段对依次合并成一条线段。重复此过程,直到不再合并行段。我们还提出了一种定量比较线段检测算法的方法。在york-urban数据集上的结果表明,与最新的线段检测算法相比,我们的合并线段更接近人类标记的地面真线段。

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

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

相关文章

联想乐商店更新安卓APK错误处理

当你点击“重新提交”&#xff0c;联想开放平台会卡死 其实他们的网页是有BUG的。HTTP GET appDetail请求会有个服务器内部错误 联系了联想客服&#xff0c;他们的绕过去方案是&#xff0c;你要选择“已上架” 然后再更新版本就可以了

【Python机器学习系列】建立XGBoost模型预测心脏疾病(完整实现过程)

一、引言 前文回顾&#xff1a; 一文彻底搞懂机器学习中的归一化与反归一化问题 【Python机器学习系列】一文彻底搞懂机器学习中表格数据的输入形式&#xff08;理论源码&#xff09; 【Python机器学习系列】一文带你了解机器学习中的Pipeline管道机制&#xff08;理论源码…

【Python】03快速上手爬虫案例三:搞定药师帮

文章目录 前言1、破解验证码2、获取数据 前言 提示&#xff1a;通过用户名、密码、搞定验证码&#xff0c;登录进药师帮网站&#xff0c;然后抓取想要的数据。 爬取数据&#xff0c;最终效果图&#xff1a; 1、破解验证码 使用药师帮测试系统&#xff1a;https://dianrc.ysb…

2024 高级前端面试题之 HTML 「精选篇」

该内容主要整理关于 HTML 的相关面试题&#xff0c;其他内容面试题请移步至 「最新最全的前端面试题集锦」 查看。 HTML模块精选篇 1. 如何理解HTML语义化2. H5的新特性有哪些3. 说一下 HTML5 Drag API4. iframe有那些缺点5. 如何实现浏览器内多个标签页之间的通信6. 简述一下s…

Elasticsearch:如何为 Elastic Stack 配置 AI Assistant

了解并安装 Elastic AI Assistant Elastic 推出了 Observability AI Assistant&#xff0c;这是一款利用生成式 AI 来增强你的 Observability 体验的强大工具。 该 AI 助手由 OpenAI 或 Azure OpenAI 服务的连接器提供支持&#xff0c;可带来上下文洞察和聊天功能&#xff0c;…

104.乐理基础-五线谱-中音谱号、次中音谱号

内容参考于&#xff1a;三分钟音乐社 上一个内容&#xff1a;103.乐理基础-五线谱-低音谱号-CSDN博客 上一个内容练习答案&#xff1a; 常用的谱号就是下图所示的四个&#xff0c;其中高音谱号与低音谱号已经在上一个内容和上上一个内容中写过了&#xff0c;音乐中百分之九十…

【C++历练之路】探秘C++三大利器之一——多态

W...Y的主页 &#x1f60a; 代码仓库分享&#x1f495; 前言&#x1f354;: 在计算机科学的广袤领域中&#xff0c;C多态性是一门令人着迷的技术艺术&#xff0c;它赋予我们的代码更强大的灵活性和可维护性。想象一下&#xff0c;你正在构建一个程序&#xff0c;需要适应不断…

python3.8 安装缺少ssl、_ctypes模块解决办法

问题 安装pyhton3.8安装默认不依赖ssl 运行Flask项目时报错&#xff1a; Traceback (most recent call last):File "/usr/local/python3/bin/flask", line 8, in <module>sys.exit(main())File "/usr/local/python3/lib/python3.8/site-packages/flask…

电脑文件丢失怎么恢复数据?数据恢复,3个方法!

“我有一份很重要的资料文件保存在电脑上了&#xff0c;但是刚刚发现这些文件莫名其妙丢失了。电脑文件丢失应该怎么恢复数据呀&#xff1f;大家有什么比较好用的方法可以推荐吗&#xff1f;” 在日常生活中&#xff0c;我们经常都需要使用电脑&#xff0c;当然&#xff0c;也会…

虹科干货 | 如何使用nProbe Cento构建100 Gbit NetFlow 传感器

本文是一份全面的指南&#xff0c;解释了如何使用nProbe Cento构建一个高效的100 Gbit NetFlow传感器。旨在帮助大家充分利用NetFlow技术&#xff0c;以监控和分析高速网络流量。 当需要监控分布式网络&#xff0c;了解流经上行链路或关键网段的网络流量时&#xff0c;NetFlow…

Linux系列之查看cpu、内存、磁盘使用情况

查看磁盘空间 df命令用于显示磁盘分区上的可使用的磁盘空间。默认显示单位为KB。可以利用该命令来获取硬盘被占用了多少空间&#xff0c;目前还剩下多少空间等信息。使用df -h命令&#xff0c;加个-h参数是为了显示GB MB KB单位&#xff0c;这样更容易查看 Filesystem …

如何使用手机安装JuiceSSH远程连接本地Linux服务器

⛳️ 推荐 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 文章目录 ⛳️ 推荐1. Linux安装cpolar2. 创建公网SSH连接地址3. JuiceSSH公网远程连接4. 固定连接SSH公网地址5. SSH固定地址…

毕设(一)——概述

文章目录 一、前言二、设计构思2.1 软件构思2.2 硬件构思 三、计划安排四、计划 一、前言 emmmm,我查了查我做的是&#xff0c;井盖侧翻&#xff0c;嗯&#xff0c;外加一些其他传感器&#xff0c;GPS等等吧。用的话&#xff0c;我这边依旧是准备是pico作为主控 二、设计构思…

猫咪不吃东西怎么办?大多猫咪都爱吃的主食冻干分享

猫咪不吃东西怎么办&#xff1f;遇到这类情况需要主人去观察猫咪的情况&#xff0c;如果猫咪除了不吃猫粮还出现了呕吐、腹泻、体温异常等其他情况就要考虑猫咪是不是生病了。如果排除疾病原因&#xff0c;那猫咪不吃东西怎么办呢&#xff1f;可能是猫粮的口感已经让猫咪感到腻…

图形绘制-仪表盘(3)

本章节我们介绍如何绘制仪表盘内的车速、单位&#xff08;Km/h&#xff09;、标题等信息。 效果如下&#xff1a; 关于通过继承重写QWidget的绘制事件paintEvent()&#xff0c;来绘制仪表盘的基础操作&#xff0c;请看 《图形绘制-仪表盘&#xff08;1&#xff09;-CSDN博客》…

2024 IC FPGA 岗位 校招面试记录

引言 各位看到这篇文章时&#xff0c;24届校招招聘已经渐进尾声了。 在这里记录一下自己所有面试&#xff08;除了时间过短或者没啥干货的一些研究所外&#xff0c;如中电55所&#xff08;南京&#xff09;&#xff0c;航天804所&#xff08;上海&#xff09;&#xff09;的经…

还在担心报表不好做?不用怕,试试这个方法

前言 在各种业务场景中&#xff0c;我们经常需要生成各种报表&#xff0c;例如学校中的学生成绩表、商业场景中的销售单和发票单、测量检测场景中的检测报告等等。这些报表对于组织和管理数据非常重要&#xff0c;因为它们提供了直观、清晰的方式来展示和分析数据。 一般情况…

上海共享办公室的现状与未来

共享办公室&#xff0c;又称联合办公、众创空间、孵化器等&#xff0c;是一种将空闲的办公空间出租给不同的企业或个人&#xff0c;提供灵活的租期、价格和服务的新型办公模式。共享办公室的出现&#xff0c;满足了新兴企业和自由职业者对于低成本、高效率、多元化的办公需求&a…

工程监测仪器振弦采集仪详细的稳定性测试

工程监测仪器振弦采集仪详细的稳定性测试 振弦采集仪是一种常用于工程监测的仪器&#xff0c;用于测量结构的振动和变形。稳定性测试是评估采集仪的测量稳定性和精度的一种方法&#xff0c;可以确保采集仪在长时间使用中的准确性和可靠性。 稳定性测试的步骤如下&#xff1a; …

开源大规模分布式MQTT消息服务器EMQX部署教程

1.EMQX是什么&#xff1f; EMQX 是一款开源的大规模分布式 MQTT 消息服务器&#xff0c;功能丰富&#xff0c;专为物联网和实时通信应用而设计。EMQX 5.0 单集群支持 MQTT 并发连接数高达 1 亿条&#xff0c;单服务器的传输与处理吞吐量可达每秒百万级 MQTT 消息&#xff0c;并…