表格线识别通用库文档
载入中...
搜索中...
未找到
cm::Lines类 参考

线列表类 更多...

#include <lines.hpp>

类 cm::Lines 继承关系图:
cm::Lines 的协作图:

Public 成员函数

 Lines ()=default
 线列表类的默认构造函数
 
 Lines (const Lines &lines)=default
 线列表类的拷贝构造函数
 
 Lines (const std::vector< cv::Vec4i > &lines)
 线列表类的带参构造函数
 
 Lines (const std::vector< std::vector< int > > &lines)
 线列表类的带参构造函数
 
 ~Lines ()=default
 线列表类的析构函数
 
Linesoperator= (const std::vector< cv::Vec4i > &lines)
 线列表类的赋值拷贝构造函数
 
Linesoperator= (const std::vector< std::vector< int > > &lines)
 线列表类的赋值拷贝构造函数
 
LinesRemoveLines (const std::unordered_set< size_t > &deleted_indexes)
 移除指定索引的线段
 
LinesRemoveLines (const std::unordered_set< Line, Line::Hash > &deleted_lines)
 移除指定线段集合
 
LinesRemoveLines (const Lines &deleted_lines)
 移除指定线段集合
 
const LinesClassifyLines (Lines &hlines, Lines &vlines) const
 对线段进行分类
 
double LineLength (Statistic type, const Interval &x_range=Interval::All(), const Interval &y_range=Interval::All(), bool is_rough=false)
 计算线数组中有效线的长度
 
Line MergeLines (LineType line_type) const
 合并线列表
 
Rect Boundary (int margin=0) const
 获取线列表的边界
 
cm::size_t NumberInInterval (const Interval &x_range, const Interval &y_range)
 计算区间内的线段数量
 
std::unordered_set< intGetLinesIndexInLine (const Line &line, int threshold=2, bool strict_inspect=true)
 获取线在线列表中的索引
 
LinesConnectLines (LineType line_type=ULINE, int threshold=4, int max_distance=100, bool strict_inspect=true, const Interval &old_line_len_range=Interval::All(), bool oline_len_condition=true, const Interval &new_line_len_range=Interval::All())
 连接线列表的线段
 
LinesConnectAdjacentLines (int threshold=4, int max_distance=100, bool strict_inspect=true, const Interval &old_line_len_range=Interval::All(), bool oline_len_condition=true, const Interval &new_line_len_range=Interval::All())
 连接线列表的相邻线段
 
template<typename FUNC = Line::CompareByLength>
std::unordered_set< size_tGetDuplicateLines (LineType line_type=ULINE, double threshold=5, double min_overlap_ratio=0.5, Statistic near_method=cm::MAXIMUM, const FUNC &func=Line::CompareByLength(true)) const
 获取重复线段对应的索引
 
template<typename FUNC = Line::CompareByLength>
std::unordered_set< size_tGetAdjacentDuplicateLines (double threshold, double min_overlap_ratio=0.5, Statistic near_method=cm::MAXIMUM, const FUNC &func=Line::CompareByLength(true)) const
 获取相邻重复线段对应的索引
 
template<typename FUNC = Line::CompareByLength>
LinesRmDuplicateLines (LineType line_type=ULINE, double threshold=5, double min_overlap_ratio=0.5, Statistic near_method=cm::MAXIMUM, const FUNC &func=Line::CompareByLength(true))
 删除重复线
 
template<typename FUNC = Line::CompareByLength>
LinesRmAdjacentDuplicateLines (double threshold, double min_overlap_ratio=0.5, Statistic near_method=cm::MAXIMUM, const FUNC &func=Line::CompareByLength(true))
 删除相邻的重复线
 
- Public 成员函数 继承自 cm::List< Line >
 List ()=default
 列表类的默认构造函数
 
 List (const List< Line > &list)=default
 列表类的拷贝构造函数
 
 List (const std::vector< Line > &list)
 列表类的带参构造函数
 
 ~List ()=default
 列表类的析构函数
 
List< Line > & operator+= (const List< Line > &list)
 列表类重载加等于运算符
 
List< LineFilter (const FUNC &func) const
 过滤列表项
 
U Reduce (const FUNC &func, U initial_value=U{}) const
 累计列表项
 
List< UMap (const FUNC &func) const
 列表项映射
 
List< LineMutFilter (const FUNC &func)
 过滤列表项
 
U MutReduce (const FUNC &func, U initial_value=U{})
 累计列表项
 
List< UMutMap (const FUNC &func)
 列表项映射
 
const_iterator Max () const
 求列表中的最大值
 
const_iterator Max (const FUNC &func) const
 求列表中的最大值
 
const_iterator Min () const
 求列表中的最小值
 
const_iterator Min (const FUNC &func) const
 求列表中的最小值
 
List< Line > & Sort ()
 对列表进行排序
 
List< Line > & Sort (const FUNC &func)
 对列表进行排序
 
iterator Order (size_t index)
 按序获取列表中指定索引的元素
 
iterator Order (size_t index, const FUNC &func)
 按序获取列表中指定索引的元素
 
bool Include (const Line &value) const
 判断列表中是否包含指定值
 
bool Include (const FUNC &func) const
 判断列表中是否包含满足指定条件的值
 
size_t Index (const Line &value, size_t from_index=0) const
 查找指定值在列表中的索引
 
size_t Index (const FUNC &func, size_t from_index=0) const
 查找指定值在列表中的索引
 
size_t LastIndex (const Line &value, size_t from_index=INT_MAX) const
 查找指定值在列表中的索引
 
size_t LastIndex (const FUNC &func, size_t from_index=INT_MAX) const
 查找指定值在列表中的索引
 
size_t Count (const Line &value) const
 统计列表中指定值的出现次数
 
size_t Count (const FUNC &func) const
 统计满足指定条件的元素个数
 
List< Line > & Reverse ()
 对列表中的元素进行反转
 
List< Line > & Shuffle ()
 对列表中的元素进行随机打乱
 
List< Line > & Fill (const Line &value)
 将列表中所有元素填充为指定值
 
List< LineSlice (size_t start, size_t end=UINT_MAX) const
 切片提取列表中指定范围的元素
 

详细描述

线列表类

该类公有继承自 List<Line> 类,用于管理 线 列表并提供相应的操作。

作者
dreamy-xay
日期
2024-03-02

在文件 lines.hpp34 行定义.

构造及析构函数说明

◆ Lines() [1/4]

cm::Lines::Lines ( )
default

线列表类的默认构造函数

这是这个函数的调用关系图:

◆ Lines() [2/4]

cm::Lines::Lines ( const Lines & lines)
default

线列表类的拷贝构造函数

◆ Lines() [3/4]

cm::Lines::Lines ( const std::vector< cv::Vec4i > & lines)
inline

线列表类的带参构造函数

通过std::vector<cv::Vec4i>构造线列表。

参数
lines包含多个cv::Vec4i对象的向量,每个cv::Vec4i对象表示一条线段的两个端点坐标(x1, y1, x2, y2)
注解
  • 此构造函数遍历一个包含 cv::Vec4i 对象的 std::vector,每个 cv::Vec4i 对象代表一条线段,其中包含线段的两个端点(x1, y1, x2, y2)。
  • 对于每个 cv::Vec4i 对象,构造函数将其转换为 Line 对象并添加到 Lines 列表中。这允许直接从 OpenCV 的线段表示转换为自定义的 Lines 集合,便于后续处理和操作。
作者
dreamy-xay
日期
2023-12-05

在文件 lines.hpp87 行定义.

◆ Lines() [4/4]

cm::Lines::Lines ( const std::vector< std::vector< int > > & lines)
inline

线列表类的带参构造函数

通过std::vector<std::vector<int>>构造线列表。

参数
lines包含多个std::vector<int>对象的向量,每个std::vector<int>对象表示一条线段的两个端点坐标(x1, y1, x2, y2)
注解
  • 此构造函数遍历一个包含 std::vector<int> 对象的 std::vector,每个 std::vector<int> 对象代表一条线段,其中包含线段的两个端点(x1, y1, x2, y2)。
  • 对于每个 std::vector<int> 对象,构造函数将其转换为 Line 对象并添加到 Lines 列表中。这允许直接从 OpenCV 的线段表示转换为自定义的 Lines 集合,便于后续处理和操作。
作者
dreamy-xay
日期
2023-12-05

在文件 lines.hpp105 行定义.

◆ ~Lines()

cm::Lines::~Lines ( )
default

线列表类的析构函数

成员函数说明

◆ Boundary()

Rect cm::Lines::Boundary ( int margin = 0) const
inline

获取线列表的边界

根据线列表中所有线段的端点坐标,计算出一个边界矩形。边界矩形的左、右、上、下边界分别根据线段端点的最小和最大值计算得出,并根据指定的边距向外扩展一定像素数。

参数
margin边界扩充的像素数,可以是负数 默认值 0
返回
边界 矩形,包括左上角坐标、宽度和高度
作者
justliulong
日期
2023-12-05

在文件 lines.hpp352 行定义.

◆ ClassifyLines()

const Lines & cm::Lines::ClassifyLines ( Lines & hlines,
Lines & vlines ) const
inline

对线段进行分类

该函数用于对当前 Lines 对象中的线段进行分类,将水平线段和垂直线段分别存储到传入的hlinesvlines中。

参数
hlines分离得到的横线列表
vlines分离得到的竖线列表
返回
类自身引用,方便链式调用
注意
函数会首先清空传入的 hlines 和 vlines。
作者
justliulong
日期
2023-12-05

在文件 lines.hpp258 行定义.

这是这个函数的调用关系图:

◆ ConnectAdjacentLines()

Lines & cm::Lines::ConnectAdjacentLines ( int threshold = 4,
int max_distance = 100,
bool strict_inspect = true,
const Interval & old_line_len_range = Interval::All(),
bool oline_len_condition = true,
const Interval & new_line_len_range = Interval::All() )
inline

连接线列表的相邻线段

这个函数用于连接相邻线段,根据指定的条件和阈值进行线段的合并操作。

参数
threshold点距阈值,设置的越小越精确(不容易连错线),具体参考 Lines 类中函数 GetLinesIndexInLine 参数 默认为 4
max_distance两条线的最大相距的距离 默认为 100
strict_inspect是否开启严格检查模式(开启后不容易连错线),具体参考 Lines 类中函数 GetLinesIndexInLine 参数 默认为 true
old_line_len_range连接前两条原始线的长度范围 默认为 cm::Interval::All()
oline_len_condition连接前两条短线的长度范围判断条件:当为 true 时,需要确保两条线都在指定范围内;当为 false 时,只需确保存在一条线在指定范围内 默认为 true
new_line_len_range连接后的新线的长度范围 默认为 cm::Interval::All()
注意
  • 在调用该函数之前,请确保线列表已按预期顺序排序,并且所有线属于相同类型。
  • 该函数在执行过程中不会改变线列表的排序状态。
  • 最终连接的效果将极大程度依赖于初始的排序状态。
注解
由于算法中使用了一个循环来遍历相邻线,并且没有嵌套循环,因此时间复杂度是线性的。对于线列表的长度为 n,算法的时间复杂度为 O(n)。
返回
类自身引用,方便链式调用
作者
dreamy-xay
日期
2023-12-07

在文件 lines.hpp596 行定义.

函数调用图:

◆ ConnectLines()

Lines & cm::Lines::ConnectLines ( LineType line_type = ULINE,
int threshold = 4,
int max_distance = 100,
bool strict_inspect = true,
const Interval & old_line_len_range = Interval::All(),
bool oline_len_condition = true,
const Interval & new_line_len_range = Interval::All() )
inline

连接线列表的线段

该函数用于连接线列表中满足指定条件的线段,支持横线和竖线的连接。当线列表中线段类型为横线或竖线时,利用并查集进行线段的连接判断;当线列表中线段类型位未知时,将线列表按照横线和竖线进行分类后再进行连接。

参数
line_type线类型 默认为 cm::ULINE,即未知线类型
threshold点距阈值,设置的越小越精确(不容易连错线),具体参考 Lines 类中函数 GetLinesIndexInLine 参数 默认为 4
max_distance两条线的最大相距的距离 默认为 100
strict_inspect是否开启严格检查模式(开启后不容易连错线),具体参考 Lines 类中函数 GetLinesIndexInLine 参数 默认为 true
old_line_len_range连接前两条原始线的长度范围 默认为 cm::Interval::All()
oline_len_condition连接前两条短线的长度范围判断条件:当为 true 时,需要确保两条线都在指定范围内;当为 false 时,只需确保存在一条线在指定范围内 默认为 true
new_line_len_range连接后的新线的长度范围 默认为 cm::Interval::All()
注解
该函数不要求线列表中线的顺序或类型,因为它利用了并查集去连接线。因此,算法的时间复杂度为 O(n^2),其中 n 是线列表的长度。
返回
类自身引用,方便链式调用
作者
dreamy-xay
日期
2023-12-07

在文件 lines.hpp490 行定义.

函数调用图:

◆ GetAdjacentDuplicateLines()

template<typename FUNC >
std::unordered_set< size_t > cm::Lines::GetAdjacentDuplicateLines ( double threshold,
double min_overlap_ratio = 0.5,
Statistic near_method = cm::MAXIMUM,
const FUNC & func = Line::CompareByLength(true) ) const
inline

获取相邻重复线段对应的索引

该函数用于检测相邻的重复线段,并根据指定的条件和阈值返回这些重复线段的索引。

模板参数
FUNC函数对象类型,是参数func的类型,一般由编译器自行推导
参数
threshold判断两线是否相邻的阈值,具体查看 cm::Line 的 IsNear 函数阈值参数 默认为 5
min_overlap_ratio最小重叠比例(横线:横线在x坐标上重叠区域的长度 / 横线在x坐标上的最小长度 >= 最小重叠比例,竖线同理) 默认是 0.5
near_method邻近方法(判断两个线是否相邻的距离计算方法),具体查看 Line::IsNear 函数统计方式参数 默认是 cm::MAXIMUM
func用于确定选择哪一条重复线段的函数对象,返回 true 时选择 line1,反之选择 line2(形式:(const cm::Line& line1, const cm::Line& line2) -> bool,支持函数指针、lambda表达式、仿函数等) 默认为 cm::Line::CompareByLength(true),即选择粗糙长度小的那根线
返回
类自身引用,方便链式调用
注意
  • 在调用该函数之前,请确保线列表已按预期顺序排序,并且所有线属于相同类型。
  • 该函数在执行过程中不会改变线列表的排序状态。
  • 最终获得重复线段的结果将在很大程度上取决于初始排序状态。
注解
由于算法中使用了一个循环来遍历相邻线,并且没有嵌套循环,因此时间复杂度是线性的。对于线列表的长度为 n,算法的时间复杂度为 O(n)。
作者
dreamy-xay
日期
2023-12-30

在文件 lines.hpp780 行定义.

这是这个函数的调用关系图:

◆ GetDuplicateLines()

template<typename FUNC >
std::unordered_set< size_t > cm::Lines::GetDuplicateLines ( LineType line_type = ULINE,
double threshold = 5,
double min_overlap_ratio = 0.5,
Statistic near_method = cm::MAXIMUM,
const FUNC & func = Line::CompareByLength(true) ) const
inline

获取重复线段对应的索引

该函数用于检测重复线段,并根据指定的条件和阈值返回这些重复线段的索引。当线段列表中的线段类型为横线或竖线时,将直接检测重复线段的索引;而当线段列表中的线段类型未知时,会根据线段的类型进行分类,然后分别执行检测操作。

模板参数
FUNC函数对象类型,是参数func的类型,一般由编译器自行推导
参数
line_type线类型 默认为 cm::ULINE,即未知线类型
threshold判断两线是否相邻的阈值,具体查看 cm::Line::IsNear() 函数阈值参数 默认为 5
min_overlap_ratio最小重叠比例(横线:横线在x坐标上重叠区域的长度 / 横线在x坐标上的最小长度 >= 最小重叠比例,竖线同理) 默认是 0.5
near_method邻近方法(判断两个线是否相邻的距离计算方法),具体查看 Line::IsNear 函数统计方式参数 默认是 cm::MAXIMUM
func用于确定选择哪一条重复线段的函数对象,返回 true 时选择 line1,反之选择 line2(形式:(const cm::Line& line1, const cm::Line& line2) -> bool,支持函数指针、lambda表达式、仿函数等) 默认为 cm::Line::CompareByLength(true),即选择粗糙长度小的那根线
返回
类自身引用,方便链式调用
注解
该函数适用于任意线段列表,其算法时间复杂度为 O(n^2)。
作者
dreamy-xay
日期
2023-12-30

在文件 lines.hpp687 行定义.

函数调用图:
这是这个函数的调用关系图:

◆ GetLinesIndexInLine()

std::unordered_set< int > cm::Lines::GetLinesIndexInLine ( const Line & line,
int threshold = 2,
bool strict_inspect = true )
inline

获取线在线列表中的索引

给定一条长线line,确定线列表中哪些线段是该长线的子线段(可以通过参数控制判断),然后返回所有子线段在线列表中的索引。

参数
line指定长线,可以是横线或者竖线
threshold点距阈值 默认为 2
strict_inspect是否开启严格检查模式(对于竖线:检查x坐标范围,对于横线:检查y坐标范围) 默认为 true
注解
对于点距阈值参数的取值,其含义如下:在满足其他条件的情况下,当线段的两个端点到长线的距离均小于等于阈值时,判断该线段为长线的子线段。
返回
子线段在线列表中的索引集合
注意
线列表中的所有线段必须是同一类型,长线的类型必须与线列表中的所有线段类型保持一致。
作者
dreamy-xay
日期
2023-12-29

在文件 lines.hpp406 行定义.

这是这个函数的调用关系图:

◆ LineLength()

double cm::Lines::LineLength ( Statistic type,
const Interval & x_range = Interval::All(),
const Interval & y_range = Interval::All(),
bool is_rough = false )
inline

计算线数组中有效线的长度

该函数根据给定的统计类型和范围,计算符合条件的线段的长度统计值,不要求有序的线列表。

参数
type统计方式,可以是 AVERAGE (平均值)、 MAXIMUM (最大值)或 MINIMUM (最小值)
x_rangex 坐标范围,用于过滤线段 默认值 cm::Interval::All()
y_rangey 坐标范围,用于过滤线段 默认值 cm::Interval::All()
is_rough是否使用粗略计算长度,true 表示粗略计算(横线:长度为两点x坐标差,竖线:长度为两点y坐标差),false表示精确计算(线段两点距离) 默认为 false
返回
计算得到的长度统计值,根据统计类型不同而返回平均值、最大值或最小值
警告
如果统计类型不正确时抛出异常。
作者
justliulong
日期
2023-12-05

在文件 lines.hpp287 行定义.

函数调用图:

◆ MergeLines()

Line cm::Lines::MergeLines ( LineType line_type) const
inline

合并线列表

根据指定的线段类型,将当前 Lines 对象中的线段合并成一条新线段。

参数
line_type线段类型,可以是 HLINE (横线)或 VLINE (竖线)
返回
合并后的新线段
注解
如果线段类型为横线,则合并后的新线段为水平方向上最小和最大端点组成的线段;如果线段类型为竖线,则合并后的新线段为垂直方向上最小和最大端点组成的线段。
警告
如果线段类型不正确时抛出异常。
作者
dreamy-xay
日期
2023-12-31

在文件 lines.hpp320 行定义.

函数调用图:
这是这个函数的调用关系图:

◆ NumberInInterval()

size_t cm::Lines::NumberInInterval ( const Interval & x_range,
const Interval & y_range )
inline

计算区间内的线段数量

统计线段集合中落在指定 x 范围和 y 范围内的线段数量。

参数
x_rangex 坐标范围
y_rangey 坐标范围
返回
落在指定区间内的线段数量
作者
justliulong
日期
2023-12-05

在文件 lines.hpp383 行定义.

函数调用图:

◆ operator=() [1/2]

Lines & cm::Lines::operator= ( const std::vector< cv::Vec4i > & lines)
inline

线列表类的赋值拷贝构造函数

通过std::vector<cv::Vec4i>构造线列表。

参数
lines包含多个cv::Vec4i对象的向量,每个cv::Vec4i对象表示一条线段的两个端点坐标(x1, y1, x2, y2)
注解
  • 此构造函数遍历一个包含 cv::Vec4i 对象的 std::vector,每个 cv::Vec4i 对象代表一条线段,其中包含线段的两个端点(x1, y1, x2, y2)。
  • 对于每个 cv::Vec4i 对象,构造函数将其转换为 Line 对象并添加到 Lines 列表中。这允许直接从 OpenCV 的线段表示转换为自定义的 Lines 集合,便于后续处理和操作。
作者
dreamy-xay
日期
2023-12-18

在文件 lines.hpp123 行定义.

◆ operator=() [2/2]

Lines & cm::Lines::operator= ( const std::vector< std::vector< int > > & lines)
inline

线列表类的赋值拷贝构造函数

通过std::vector<std::vector<int>>构造线列表。

参数
lines包含多个std::vector<int>对象的向量,每个std::vector<int>对象表示一条线段的两个端点坐标(x1, y1, x2, y2)
注解
  • 此构造函数遍历一个包含 std::vector<int> 对象的 std::vector,每个 std::vector<int> 对象代表一条线段,其中包含线段的两个端点(x1, y1, x2, y2)。
  • 对于每个 std::vector<int> 对象,构造函数将其转换为 Line 对象并添加到 Lines 列表中。这允许直接从 OpenCV 的线段表示转换为自定义的 Lines 集合,便于后续处理和操作。
作者
dreamy-xay
日期
2023-12-18

在文件 lines.hpp144 行定义.

◆ RemoveLines() [1/3]

Lines & cm::Lines::RemoveLines ( const Lines & deleted_lines)
inline

移除指定线段集合

该函数通过遍历当前 Lines 对象,并根据给定的线列表deleted_lines来决定是否保留每条线段。不在deleted_lines中的线段将被保留。

参数
deleted_lines要删除的线列表
返回
类自身引用,方便链式调用
注解
  • 该操作会修改原始 Lines 对象,移除其中指定索引的线段。
  • 操作完成后,原始对象中将只包含未被指定删除的线段。
  • 线列表 deleted_lines 中的线段是基于原始 Lines 对象中线段的内容进行匹配的。
  • 如果需要移除多个线段,推荐一次性指定所有要删除的线段,以提高效率。
作者
justliulong
日期
2023-12-05

在文件 lines.hpp234 行定义.

函数调用图:

◆ RemoveLines() [2/3]

Lines & cm::Lines::RemoveLines ( const std::unordered_set< Line, Line::Hash > & deleted_lines)
inline

移除指定线段集合

该函数通过遍历当前 Lines 对象,并根据给定的线段集合deleted_lines来决定是否保留每条线段。不在deleted_lines中的线段将被保留。

参数
deleted_lines要删除的线段集合
返回
类自身引用,方便链式调用
注解
  • 该操作会修改原始 Lines 对象,移除其中指定索引的线段。
  • 操作完成后,原始对象中将只包含未被指定删除的线段。
  • 线段集合 deleted_lines 中的线段是基于原始 Lines 对象中线段的内容进行匹配的。
  • 如果需要移除多个线段,推荐一次性指定所有要删除的线段,以提高效率。
作者
justliulong
日期
2023-12-05

在文件 lines.hpp202 行定义.

◆ RemoveLines() [3/3]

Lines & cm::Lines::RemoveLines ( const std::unordered_set< size_t > & deleted_indexes)
inline

移除指定索引的线段

该函数通过遍历当前 Lines 对象,并根据给定的索引集合deleted_indexes决定是否保留每条线段。不在deleted_indexes中的线段将被保留。

参数
deleted_indexes要删除线段的索引集合
返回
类自身引用,方便链式调用
注解
  • 该操作会修改原始 Lines 对象,移除其中指定索引的线段。
  • 操作完成后,原始对象中将只包含未被指定删除的线段。
  • 索引集合 deleted_indexes 中的索引是基于原始 Lines 对象中线段的位置。
  • 如果有多个线段需要被删除,推荐一次性指定所有要删除的线段的索引,以提高效率。
作者
justliulong
日期
2023-12-05

在文件 lines.hpp169 行定义.

这是这个函数的调用关系图:

◆ RmAdjacentDuplicateLines()

template<typename FUNC >
Lines & cm::Lines::RmAdjacentDuplicateLines ( double threshold,
double min_overlap_ratio = 0.5,
Statistic near_method = cm::MAXIMUM,
const FUNC & func = Line::CompareByLength(true) )
inline

删除相邻的重复线

该函数用于删除相邻重复线,根据指定的条件和阈值进行线段的删除操作。

模板参数
FUNC函数对象类型,是参数func的类型,一般由编译器自行推导
参数
threshold判断两线是否相邻的阈值,具体查看 cm::Line 的 IsNear 函数阈值参数 默认为 5
min_overlap_ratio最小重叠比例(横线:横线在x坐标上重叠区域的长度 / 横线在x坐标上的最小长度 >= 最小重叠比例,竖线同理) 默认是 0.5
near_method邻近方法(判断两个线是否相邻的距离计算方法),具体查看 Line::IsNear 函数统计方式参数 默认是 cm::MAXIMUM
func用于确定删除哪一条重复线段的函数对象,返回 true 时删除 line1,反之删除 line2(形式:(const cm::Line& line1, const cm::Line& line2) -> bool,支持函数指针、lambda表达式、仿函数等) 默认为 cm::Line::CompareByLength(true),即删除粗糙长度小的那根线
返回
类自身引用,方便链式调用
注意
  • 在调用该函数之前,请确保线列表已按预期顺序排序,并且所有线属于相同类型。
  • 该函数在执行过程中不会改变线列表的排序状态。
  • 最终删除的效果将极大程度依赖于初始的排序状态。
注解
由于算法中使用了一个循环来遍历相邻线,并且没有嵌套循环,因此时间复杂度是线性的。对于线列表的长度为 n,算法的时间复杂度为 O(n)。
作者
dreamy-xay
日期
2023-12-30

在文件 lines.hpp860 行定义.

函数调用图:

◆ RmDuplicateLines()

template<typename FUNC >
Lines & cm::Lines::RmDuplicateLines ( LineType line_type = ULINE,
double threshold = 5,
double min_overlap_ratio = 0.5,
Statistic near_method = cm::MAXIMUM,
const FUNC & func = Line::CompareByLength(true) )
inline

删除重复线

该函数用于去除重复的线段,支持横线和竖线的删除操作。当线列表中的线段类型为横线或竖线时,会直接删除重复的线段;而当线列表中的线段类型未知时,会根据线段的类型进行分类,然后分别进行删除操作。

模板参数
FUNC函数对象类型,是参数func的类型,一般由编译器自行推导
参数
line_type线类型 默认为 cm::ULINE,即未知线类型
threshold判断两线是否相邻的阈值,具体查看 cm::Line::IsNear() 函数阈值参数 默认为 5
min_overlap_ratio最小重叠比例(横线:横线在x坐标上重叠区域的长度 / 横线在x坐标上的最小长度 >= 最小重叠比例,竖线同理) 默认是 0.5
near_method邻近方法(判断两个线是否相邻的距离计算方法),具体查看 Line::IsNear 函数统计方式参数 默认是 cm::MAXIMUM
func用于确定删除哪一条重复线段的函数对象,返回 true 时删除 line1,反之删除 line2(形式:(const cm::Line& line1, const cm::Line& line2) -> bool,支持函数指针、lambda表达式、仿函数等) 默认为 cm::Line::CompareByLength(true),即删除粗糙长度小的那根线
返回
类自身引用,方便链式调用
注解
该函数适用于任意线段列表,其算法时间复杂度为 O(n^2)。
作者
dreamy-xay
日期
2023-12-30

在文件 lines.hpp828 行定义.

函数调用图:

该类的文档由以下文件生成: