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

横线列表类 更多...

#include <hlines.h>

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

Public 成员函数

 HLines ()=default
 横线列表类的默认构造函数
 
 HLines (const HLines &hlines)=default
 横线列表类的带参构造函数
 
 HLines (const std::initializer_list< Line > &hlines)
 线列表类的初始化列表构造函数
 
 ~HLines ()=default
 横线列表类的析构函数
 
int FindNearLine (int postion, RelativePosition rp=NEAR)
 定位满足条件的线
 
int FindNearLine (const Line &line, RelativePosition rp=NEAR)
 定位满足条件的线
 
double AvgHeight (Interval index_range=Interval::All(), bool is_order=true)
 计算给定索引范围内横线的平均行高
 
HLinesExtendLines (const VLines &vlines, Position extend_direction, size_t start_hline_index=5, double threshold=0.7, size_t max_num_misaligned_lines=3, bool strict_inspect=true)
 延长特殊横线
 
HLinesOptimizeIntersections (const VLines &vlines, size_t threshold=0)
 交点优化
 
HLinesRmFreeHLines (const VLines &vlines, int threshold=2)
 删除游离横线
 
 Lines ()=default
 线列表类的默认构造函数
 
 Lines (const Lines &lines)=default
 线列表类的拷贝构造函数
 
 Lines (const std::vector< cv::Vec4i > &lines)
 线列表类的带参构造函数
 
 Lines (const std::vector< std::vector< int > > &lines)
 线列表类的带参构造函数
 
- Public 成员函数 继承自 cm::Lines
 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
 切片提取列表中指定范围的元素
 

详细描述

横线列表类

共有继承自 Lines

作者
justliulong
日期
2023-12-05

在文件 hlines.h33 行定义.

构造及析构函数说明

◆ HLines() [1/3]

cm::HLines::HLines ( )
default

横线列表类的默认构造函数

◆ HLines() [2/3]

cm::HLines::HLines ( const HLines & hlines)
default

横线列表类的带参构造函数

◆ HLines() [3/3]

cm::HLines::HLines ( const std::initializer_list< Line > & hlines)
inline

线列表类的初始化列表构造函数

该构造函数使用提供的 cm::Line 对象列表来初始化线列表类。

参数
hlines初始化线列表所需的 Line 对象的初始化列表
示例
// 支持通过 Line 对象的初始化列表进行构造
横线列表类
Definition hlines.h:33
线类
Definition line.hpp:31
点类
Definition point.hpp:52
作者
justliulong
日期
2023-12-08

在文件 hlines.cpp31 行定义.

◆ ~HLines()

cm::HLines::~HLines ( )
default

横线列表类的析构函数

成员函数说明

◆ AvgHeight()

double cm::HLines::AvgHeight ( Interval index_range = Interval::All(),
bool is_order = true )

计算给定索引范围内横线的平均行高

该函数用于计算给定索引范围内横线的平均行高,算法过程如下所述:

  • 如果横线数组是有序的(is_ordertrue),则直接使用数组中首尾两个横线的平均高度差除以索引范围的长度减一(即横线的数量)来得到平均高度。
  • 如果横线数组是无序的(is_orderfalse),则需要先根据某个坐标(可能是横线的中点或某个端点)对横线进行排序。这可以通过调用 lines.Order 方法快速获取第一根和最后一根的位置。再按照有序的方法计算得到平均行高。
参数
index_range用于计算平均高度的索引范围。
is_order指示当前横线是否有序的标志(如果为false,函数将重新排序横线数组) 默认为 true,表示有序
注意
根据 is_order 参数的取值,可能重新排序横线数组以确保有序性,如果无序(is_order 为 false),经过此函数线数组会重新排乱序
返回
指定索引范围内横线的平均高度
作者
justliulong
日期
2024-2-29

在文件 hlines.cpp137 行定义.

◆ ExtendLines()

HLines & cm::HLines::ExtendLines ( const VLines & vlines,
Position extend_direction,
size_t start_hline_index = 5,
double threshold = 0.7,
size_t max_num_misaligned_lines = 3,
bool strict_inspect = true )

延长特殊横线

该函数用于在已排序的横线列表 hlines 中查找并延长特殊横线,函数会根据 extend_direction(横线延伸的方向,只能是 LEFT | RIGHT)对横线进行延长。延长过程遵循以下规则:

  • 对于每一根横线,计算其与最左侧竖线和最右侧竖线的交点。
  • 如果横线两边都未对齐边界,或者长度小于阈值,则忽略该横线(不是特殊横线)。
  • 如果横线的一端未对齐边界(根据 strict_inspect 判断),则检查:
    • 该横线右侧是否存在在最大允许连续未对齐的横线的数量条件下,左(或右)对齐了最左侧(或最右侧)竖线的横线。
    • 如果存在,并且该横线左侧的横线也左(或右)对齐了最左侧(或最右侧)竖线,则将该横线未对齐的一端延长至对齐边界。
前置条件
进入该函数前需满足横线列表是已排序状态,该函数不影响排序状态。
注解
特殊横线:该横线是第 5 根横线之后的横线,并且其长度超过横线平均长度 M,其左右端点只有一边未对齐边界。
参数
vlines竖线列表
extend_direction横线延伸的方向(枚举 Position 仅允许为 LEFT | RIGHT)
start_hline_index开始延伸横线的索引 默认为 5(从第五根横线开始查找需要延长的横线)
threshold横线长度阈值(被延长的横线的长度 >= 平均横线长度 * 阈值) 默认为 0.7
max_num_misaligned_lines最大允许连续未对齐的横线的数量 默认为 3
strict_inspect是否开启严格检查模式(左右端点只有一边未对齐边界) 默认为 true
返回
类自身引用,方便链式调用
作者
dreamy-xay
日期
2024-01-06

在文件 hlines.cpp181 行定义.

函数调用图:

◆ FindNearLine() [1/2]

int cm::HLines::FindNearLine ( const Line & line,
RelativePosition rp = NEAR )

定位满足条件的线

根据所给参考线定位距离参考值满足条件的线。

参数
line参考线
rp指定相对参考线的位置
返回
定位线的索引
作者
justliulong
日期
2023-12-05

在文件 hlines.cpp102 行定义.

函数调用图:

◆ FindNearLine() [2/2]

int cm::HLines::FindNearLine ( int postion,
RelativePosition rp = NEAR )

定位满足条件的线

根据所给参考值定位距离参考值满足条件的线。

参数
postion参考值
rp指定相对参考值的位置
注意

  • 需要线按照坐标位置排好序,该函数不影响线的排序
  • 指定相对参考值的位置有三种情况,具体来说对于横线是指相对参考位置的上\下边或者直接最近
  • 如果输入的 参考值 小于最小的线的 位置就直接返回索引为 0 的线,如果大于最大值就直接返回最后一根线的索引。
返回
定位线的索引
作者
justliulong
日期
2023-12-05

在文件 hlines.cpp51 行定义.

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

◆ 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.hpp42 行定义.

◆ 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.hpp43 行定义.

◆ OptimizeIntersections()

HLines & cm::HLines::OptimizeIntersections ( const VLines & vlines,
size_t threshold = 0 )

交点优化

该函数用于优化横线与竖线的交点位置,根据给定的阈值参数进行调整。

前置条件
要求横线列表和竖线列表均已排序,该函数不影响排序,时间复杂度为 O(nlogn)。
参数
vlines竖线列表
threshold阈值
注解
对于阈值参数的取值,其含义如下所述:
  • 当该值为 0 时,对于横线的左右端点,靠近哪根竖线就延长至哪根竖线。
  • 当该值大于 0 时:
    • 对于横线的左端点,如果与端点右侧第一根竖线的交点水平距离大于等于该阈值,则强制将横线延长至端点左侧第一根竖线,否则就近延长;
    • 对于横线的右端点,如果与端点左侧第一根竖线的交点水平距离大于等于该阈值,则强制将横线延长至端点右侧第一根竖线,否则就近延长。
返回
类自身引用,方便链式调用
作者
dreamy-xay
日期
2024-01-07

在文件 hlines.cpp291 行定义.

◆ RmFreeHLines()

HLines & cm::HLines::RmFreeHLines ( const VLines & vlines,
int threshold = 2 )

删除游离横线

逐根检查横线在阈值之内,是否与任何竖线相交。如果横线与任何一条竖线相交,将其标记为非游离。最后只将非游离横线添加到新横线列表中并返回。

注解
游离横线指的是没有任何竖线与其相交的横线。
参数
vlines竖线列表
threshold误差阈值,参数越大容错率越高 默认为 2
返回
类自身引用,方便链式调用
作者
dreamy-xay
日期
2024-01-12

在文件 hlines.cpp381 行定义.


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