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

#include <vlines.h>

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

Public 成员函数

 VLines ()=default
 竖线列表类的默认构造函数
 
 VLines (const VLines &vlines)=default
 竖线列表类的带参构造函数
 
 VLines (const std::initializer_list< Line > &vlines)
 线列表类的初始化构造函数
 
 ~VLines ()=default
 竖线列表类的析构函数
 
int FindNearLine (int postion, RelativePosition rp=NEAR)
 定位满足条件的线
 
int FindNearLine (const Line &line, RelativePosition rp=NEAR)
 定位满足条件的线
 
VLinesExtendLines (const HLines &hlines, Position extend_direction, size_t start_vline_index=5, double threshold=0.7, size_t max_num_misaligned_lines=3, bool strict_inspect=true)
 延长特殊竖线
 
VLinesOptimizeIntersections (const HLines &hlines, size_t threshold=0)
 交点优化
 
VLinesRmFreeVLines (const HLines &hlines, 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
 切片提取列表中指定范围的元素
 

详细描述

在文件 vlines.h25 行定义.

构造及析构函数说明

◆ VLines() [1/3]

cm::VLines::VLines ( )
default

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

◆ VLines() [2/3]

cm::VLines::VLines ( const VLines & vlines)
default

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

◆ VLines() [3/3]

cm::VLines::VLines ( const std::initializer_list< Line > & vlines)
inline

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

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

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

在文件 vlines.cpp31 行定义.

◆ ~VLines()

cm::VLines::~VLines ( )
default

竖线列表类的析构函数

成员函数说明

◆ ExtendLines()

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

延长特殊竖线

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

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

在文件 vlines.cpp146 行定义.

函数调用图:

◆ FindNearLine() [1/2]

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

定位满足条件的线

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

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

在文件 vlines.cpp102 行定义.

函数调用图:

◆ FindNearLine() [2/2]

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

定位满足条件的线

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

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

在文件 vlines.cpp52 行定义.

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

◆ 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()

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

交点优化

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

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

在文件 vlines.cpp255 行定义.

◆ RmFreeVLines()

VLines & cm::VLines::RmFreeVLines ( const HLines & hlines,
int threshold = 2 )

删除游离竖线

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

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

在文件 vlines.cpp346 行定义.


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