OpenCV直线段检测算法类cv::line_descriptor::LSDDetector

  • 操作系统:ubuntu22.04
  • OpenCV版本:OpenCV4.9
  • IDE:Visual Studio Code
  • 编程语言:C++11

算法描述

该类用于实现 LSD (Line Segment Detector) 直线段检测算法。LSD 是一种快速、准确的直线检测方法,能够在不依赖边缘检测的前提下直接从图像中提取出直线段。

它是 OpenCV 的 line_descriptor 模块的一部分,常用于计算机视觉任务如图像拼接、SLAM、特征匹配等。

主要功能:

  • 从灰度图像中检测直线段;
  • 支持多尺度和多金字塔层处理;
  • 输出结构化信息:线段起点、终点、长度、响应值等;
  • 可与 BinaryDescriptor 配合使用,进行线段描述符提取和匹配;

公共成员函数

  1. 创建 LSDDetector 实例
cpp 复制代码
Ptr<LSDDetector> lsd = LSDDetector::createLSDDetector();

说明:

  • 静态工厂方法,用于创建一个默认配置的 LSD 检测器;
  • 返回智能指针 Ptr。
  1. detect() 方法:检测线段
cpp 复制代码
void detect( const Mat& image, CV_OUT std::vector<KeyLine>& keylines,
             int scale, int numOctaves, const Mat& mask = Mat() );

参数说明:

参数 类型 含义
image const Mat& 输入图像(通常为单通道灰度图)
keylines std::vector& 输出的线段列表
scale int 图像缩放比例(尺度空间参数)
numOctaves int 构建的金字塔层数(尺度空间层级数)
mask const Mat&(可选) 感兴趣区域掩码

代码示例

cpp 复制代码
#include <opencv2/line_descriptor.hpp>
#include <opencv2/opencv.hpp>

using namespace cv;
using namespace cv::line_descriptor;

int main()
{
    // 加载图像
    Mat image = imread( "/media/dingxin/data/study/OpenCV/sources/images/Lenna.png", IMREAD_GRAYSCALE );
    if ( image.empty() )
    {
        std::cerr << "无法加载图像!" << std::endl;
        return -1;
    }

    // 创建 LSDDetector
    Ptr< LSDDetector > lsd = LSDDetector::createLSDDetector();

    // 存储线段
    std::vector< KeyLine > keylines;

    // 设置参数
    int scale       = 2;  // 尺度
    int num_octaves = 1;  // 金字塔层数

    // 检测线段
    lsd->detect( image, keylines, scale, num_octaves );

    std::cout << "检测到线段数量: " << keylines.size() << std::endl;

    // 可视化线段
    Mat colorImage;
    cvtColor( image, colorImage, COLOR_GRAY2BGR );

    for ( const auto& kl : keylines )
    {
        Point pt1( kl.startPointX, kl.startPointY );
        Point pt2( kl.endPointX, kl.endPointY );
        line( colorImage, pt1, pt2, Scalar( 0, 0, 255 ), 1 );  // 红色线段
    }

    imshow( "Detected Lines", colorImage );
    waitKey( 0 );

    return 0;
}

运行结果

相关推荐
满天星83035772 小时前
定长内存池ObjectPool
数据结构·c++·算法·链表
Mr数据杨2 小时前
【CanMV K210】AI 视觉 人脸关键点对齐与属性识别
人工智能·硬件开发·canmv k210
java1234_小锋2 小时前
Spring AI 2.0 开发Java Agent智能体 - 结构化输出
java·人工智能·spring
叼烟扛炮2 小时前
C++第八讲:string 类
开发语言·c++·算法·string
一切皆是因缘际会2 小时前
结构安全革命:下一代 AI 从 “不可控” 到 “绝对可控” 的范式跃迁
人工智能·安全·ai·架构
冬奇Lab2 小时前
RAG 系列(十二):高级分块策略——Parent-Child 与 Contextual Retrieval
人工智能·llm·源码
百胜软件@百胜软件2 小时前
对话益珲丨2026战略重塑:百胜E3C中台不做“记账工具”,要做品牌增长的“合伙人”
人工智能·零售数字化·数智中台·珠宝行业
极欧互联2 小时前
2026素材网站推荐排行 商用/自媒体/影视后期专用
大数据·人工智能·媒体
Chase_______2 小时前
LeetCode 1493 & 3634 题解:滑动窗口双指针,从“删一个元素的全1子数组“到“最少移除使数组平衡“
算法·leetcode
GOWIN革文品牌咨询2 小时前
机器人企业品牌语言体系怎么搭建:一句话定位、产品逻辑与解决方案表达
人工智能·机器人