提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档
1.问题描述
在使用 opencv 3.4.10 及 opencv 4.10 的时候发现一个lsd算法使用的问题:
../modules/imgproc/src/lsd.cpp:143: error: (-213:The function/feature is not implemented) Implementation has been removed due original code license issues in function 'LineSegmentDetectorImpl'
2.问题分析:
1.OpenCV 许可问题:
从OpenCV 4.1.0版本开始,LineSegmentDetector(LSD)的实现被移除,原因是存在与原始代码的许可冲突。根据评论中的信息,LSD的功能已经从OpenCV核心库中删除。
2.OpenCV版本变化:
OpenCV 3.x 版本中仍然包含了LSD功能,但从4.1.0版本开始,该功能被移除,导致脚本中调用 cv2.createLineSegmentDetector() 时出现错误。
3.使用其他替代算法:
参考: Implementation has been removed due to original code license issues #4
- 有用户提到可以使用 cv::ximgproc::FastLineDetector(FLD)作为替代。虽然FLD和LSD并不完全相同(FLD基于Canny边缘检测),但它在很多情况下可以替代LSD。
- 使用FLD的代码示例
#include <opencv2/ximgproc.hpp>
using namespace cv::ximgproc;
vector lines;
Ptr<cv::ximgproc::FastLineDetector> detector = cv::ximgproc::createFastLineDetector();
detector->detect(roi, lines);
- 安装第三方库 pylsd:
- 另一个解决方案是使用 pylsd,它是LSD的Python实现。可以通过以下命令安装 pip install pylsd:
- 然后按照 pylsd 文档,将其与OpenCV结合使用。
3.解决方法
经过测试,以下方法比较好
ubuntu18.04+opencv3.4.10+opencv3.4.10contrib+LSD使用
即: 分别找到3.4.10和3.1.0中,modules/imgproc/src中的lsd.cpp文件,将3.1.0中的lsd.cpp文件拷贝至3.4.10的对应位置中即可。
下面这个是opencv4.x的,但未进行测试
参考
OpenCV中无法使用lsd算法的问题 Implementation has been removed due original code license conflict