直线检测算法博文中缺失的几个源码(Hough_line、LSD、FLD、EDlines、LSWMS、CannyLines、MCMLSD、LSM)

直线检测在我们的图像处理算法中是非常重要的。
博文https://blog.csdn.net/WZZ18191171661/article/details/101116949
对常用的直线检测算法进行了汇总性介绍,并给出了性能对比。
无奈,本人和很多小伙伴一样,看到上面这篇博文的时间晚了,有几个代码的下载链接已经失效了。
可是这些直线检测算法又很诱人,所以本人经过一番周折,找齐了文中的所有代码。
同时,为了避免将来更多的下载链接失效,所以索性把所有的代码都保存在这篇博文中,以供自己和大家将来使用的方便。

目录

  • 1 Hough_line代码
  • 2 HoughP_line代码
  • 3 LSD代码
  • 4 FLD算法代码
  • 5 EDlines直线检测算法论文和代码
  • 6 LSWMS直线检测算法论文和代码
  • 7 CannyLines直线检测算法。
  • 8 MCMLSD直线检测算法
  • 9 LSM直线检测算法

1 Hough_line代码

# coding=utf-8
# 导入相应的python包
import cv2 
import numpy as np 
  
# 读取输入图片
img = cv2.imread('test3.jpg') 
# 将彩色图片灰度化
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)

2 HoughP_line代码

# coding=utf-8
# 导入相应的python包
import cv2 
import numpy as np 
  
# 读取输入图片
img = cv2.imread('test3.jpg') 
# 将彩色图片灰度化
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)

3 LSD代码

# coding=utf-8
import cv2
import numpy as np

# 读取输入图片
img0 = cv2.imread("test3.jpg")
# 将彩色图片转换为灰度图片
img = cv2.cvtColor(img0,cv2.COLOR_BGR2GRAY)

# 创建一个LSD对象
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()

4 FLD算法代码

# coding=utf-8
import cv2
import numpy as np

# 读取输入图片
img0 = cv2.imread("test3.jpg")
# 将彩色图片转换为灰度图片
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("LSD", img0)
cv2.waitKey(0)
cv2.destroyAllWindows()

5 EDlines直线检测算法论文和代码

EDlines直线检测算法论文百度网盘下载链接:
https://pan.baidu.com/s/1wIegM9nt97P1sq1HPrjL1g?pwd=b7of

EDlines直线检测算法我提供两个源码给大家。
首先是博文https://blog.csdn.net/WZZ18191171661/article/details/101116949中提供给大家的。
百度网盘下载链接:
https://pan.baidu.com/s/1-8zIXli1nV5V-guxYvnF8w?pwd=9u02
注意:这个代码原作者已经进行更新了,所以其主函数所在的代码并不与博文https://blog.csdn.net/WZZ18191171661/article/details/101116949中给大家展示的主函数代码一样了,但是算法是相同的算法。

另一个是某老外使用以上代码后上传分享的,下载链接如下:
https://pan.baidu.com/s/1tUQ_6INiDLn59of59IAxww?pwd=n8g7
这个代码还附带了代码运行时的原图片和结果图片,如下图所示:
直线检测算法博文中缺失的几个源码(Hough_line、LSD、FLD、EDlines、LSWMS、CannyLines、MCMLSD、LSM)_第1张图片
还需要注意:上面两个代码要想正常编译,都需要你的开发环境配置了ARPACK。

6 LSWMS直线检测算法论文和代码

论文下载链接:
https://pan.baidu.com/s/12raOHnfHZvLaPLkvNr1A7Q?pwd=byus
源码百度网盘下载链接:
https://pan.baidu.com/s/1roU8z07tzHiPY4Nm2VIFqQ?pwd=fdjm
源码中带了测试图片,如下图所示:
直线检测算法博文中缺失的几个源码(Hough_line、LSD、FLD、EDlines、LSWMS、CannyLines、MCMLSD、LSM)_第2张图片

7 CannyLines直线检测算法。

博文https://blog.csdn.net/WZZ18191171661/article/details/101116949提供的这个算法的论文和源码链接均已失效。
我花了些时间和精力,找到了,该源代码是C++写成的,需要OpenCV的支持。

下面是下载链接:

因为是自己花费时间和精力找寻的,所以我上传到了CSDN的付费下载区(1.9元即可下载),敬请大家见谅,下载链接:
https://download.csdn.net/download/wenhao_ir/85336811
由于CSDN的下载区不允许上传论文,所以需要论文的同学可以下载后私信我,我工作时都开启CSDN的,所以回复得很快的。
相关截图如下:
直线检测算法博文中缺失的几个源码(Hough_line、LSD、FLD、EDlines、LSWMS、CannyLines、MCMLSD、LSM)_第3张图片

8 MCMLSD直线检测算法

这个算法的论文百度网盘下载链接:
https://pan.baidu.com/s/1lWSu5APa55ahXRELUFvpxQ?pwd=pj4h
这个算法的代码百度网盘下载链接:
链接:https://pan.baidu.com/s/1QWP5946yuwdEVG8sRFhZyg?pwd=ow0p

9 LSM直线检测算法

这个算法的论文和代码下载链接也失效了,不过经过一番周折,我也找到了。
博主大概看了一下,LSM直线检测算法的主体代码是用C写成的,但是是用Matlab调用的,即把用C写的代码编译成MEX文件供MALTAB调用,整个代码基本没有注释。
因为是自己花时间和精力找到的,所以我也上传到了CSDN的付费下载区,敬请大家谅解。
下载链接:
https://download.csdn.net/download/wenhao_ir/85337139
由于CSDN下载区不允许上传论文,所以需要论文的朋友请下载后私信博主,博主工作时都开着CSDN的,所以会很快回复的。
直线检测算法博文中缺失的几个源码(Hough_line、LSD、FLD、EDlines、LSWMS、CannyLines、MCMLSD、LSM)_第4张图片
如果上面的LSM算法程序运行时提示lsd.mexw64无效,大家可以用MinGW64 Compiler 重新编译lsd.c,如下图所示:
在这里插入图片描述
如果提示缺少需要的符号’mxErrMsgTxt’,那么把下面的代码注释掉:
直线检测算法博文中缺失的几个源码(Hough_line、LSD、FLD、EDlines、LSWMS、CannyLines、MCMLSD、LSM)_第5张图片

你可能感兴趣的:(图像处理原理,工具,代码,直线检测算法汇总)