表格线识别通用库文档
载入中...
搜索中...
未找到
介绍

表格线识别通用库是一款基于传统算法的图像处理工具,旨在为开发者提供便捷高效的表格线识别功能。

特点

1. 有丰富的开发组件

模块名 组件 中文名 说明
base 基础模块 包含了基本的数据结构和算法功能
point 实现了一个二维空间中的坐标点
line 线 写成实现了连接两个点的直线段
rectangle 矩形 实现了由左上角点坐标和宽高所构成的矩形框
interval 区间 实现了表示一段连续的数值区间
disjoint set 并查集 实现了处理不相交集合的数据结构
scope 作用域 实现了值存储和管理的作用域机制
percent 百分比 实现了百分比和非百分比值的混合运算
list 列表 实现了在固定时间内访问任意顺序单个元素的列表容器
list 列表模块 包含了列表相关的操作和功能
lines 线列表 实现了包含多条线段的列表
rectangles 矩形列表 实现了包含多个矩形的列表
intervals 区间列表 实现了包含多个数值区间的列表
feature 功能模块 提供了具体功能实现的模块
horizontal lines 横线列表 实现了包含多条水平线的列表
vertical lines 竖线列表 实现了包含多条垂直线的列表
image 图像 实现了图像的存储、内存管理以及数据处理等功能
projection 投影 实现了图像投影及相关处理操作
image preprocess 图像预处理 实现了一系列图像预处理操作
debug 调试模块 包含了调试相关的工具和函数
color 颜色 实现了终端文本样式和颜色设置
printer 打印器 实现了复杂场景下的输出打印
complex printer 复杂打印器 实现了复杂场景下的详细输出打印
debug 调试器 实现了终端、文件形式的调试信息输出
utils 工具模块 包含了各种常用工具函数
binary 二进制 实现了与二进制数据相关的操作和转换
file 文件 实现了与文件相关的操作
inout 输入输出 实现了对文件的批量输入输出操作
string 字符串 实现了与字符串相关的操作

2. 灵活的调试功能

可以在程序的任何位置通过调试器进行交互,令其打印内部数据,或是批量输出内部图片。当程序出现各种程序异常,如:断言、异常等,将会在控制台中打印完整的错误信息。这极大地降低了调试难度,提升了开发效率和调试体验。

// 调试器
const cm::Debug debug("/path/to", "test_image");
// 根据区域处理图片
cv::Mat ModifyImage(const cv::Mat image, cm::Rect area) {
...
// 借助宏打印调试信息
Cm_DebugPrint(area, image.size());
// 借助宏打印调试信息
Cm_DebugCPrint(cv::countNonZero(cm::Projection(image).Image(cm::HDIR, area)), cm::Projection(image).Row(area.x, {area.y, area.y + area.height));
}
// 测试函数1
void Test1(cm::Rect area, cv::Mat image) {
area.Translate(9, 10);
// 开启一个新的输出图片计数器,同时设置默认的输出图片名后缀,并输出 Test1 函数第一步操作执行结果
debug.CounterStart("test1").NamedStart("Test1").OutputImage(ModifyImage(image, area));
area.Scale(0.9);
// 输出 Test1 函数第二步操作执行结果,并切回到上一个计数器,同时自动切回到上一个已设置的默认的输出图片名后缀
debug.OutputImage(ModifyImage(image, area)).CounterEnd().NamedEnd();
// 不定参数、不定类型打印变量及其参数名
debug.CPrint(area, image.size());
}
// 测试函数2
void Test2(cv::Mat image, const std::vectro<double>& scale_list) {
cm::Rect area(67, 23, 281, 382);
for(int i = 0; i < scale_list.size(); ++i) {
cm::Rect new_area(area);
new_area.Scale(scale_list[i]);
// 开启一个新的输出图片计数器,同时设置默认的输出图片名后缀,并输出 Test2 函数第一步操作执行结果
debug.CounterStart("test2").NamedStart("Test2").OutputImage(ModifyImage(image, new_area));
Test1(new_area, image);
// 输出 Test2 函数第二步操作执行结果,并关闭计数器,同时撤销默认的输出图片名后缀的设置
debug.OutputImage(ModifyImage(image, new_area)).CounterEnd().NamedEnd();
// 不定参数、不定类型打印变量,设置控制台输出没有颜色
debug.Print("__NO_COLOR__", i, area, new_area, scale_list[i]);
}
}
// 假设输入的 scale_list = {1.2, 1.5},按照执行顺序,输出的图片目录如下:
// /path/to/test_image_Test2_0.jpg
// /path/to/test_image_Test1_0.jpg
// /path/to/test_image_Test1_1.jpg
// /path/to/test_image_Test2_1.jpg
// /path/to/test_image_Test2_2.jpg
// /path/to/test_image_Test1_2.jpg
// /path/to/test_image_Test1_3.jpg
// /path/to/test_image_Test2_3.jpg
调试类
Definition debug.hpp:37
矩形类
Definition rect.hpp:31
int x
矩形的左上角 x 坐标(仅当矩形宽高为正数时)
Definition rect.hpp:34
Rect & Translate(int dx, int dy)
矩形平移
Definition rect.hpp:801
Rect & Scale(double factor)
矩形缩放
Definition rect.hpp:818
#define Cm_DebugPrint(...)
普通调试打印宏
Definition macro.h:187
#define Cm_DebugCPrint(...)
复杂调试打印宏
Definition macro.h:219
@ HDIR
横向
Definition enum.h:116

适用环境

  • Linux 系统或 Windows 系统;
  • C++11以上。

构建

准备

  • 安装 Cmake

    1. 安装 bzip2、unzip、mlocate 和 gcc

    shell yum -y install bzip2 yum –y install unzip yum install mlocate sudo yum install gcc sudo yum install gcc-c++

    2. 安装或升级 cmake

    • 下载

    shell wget https://cmake.org/files/v3.6/cmake-3.6.3.tar.gz

    • 解压

    shell tar xvf cmake-3.6.3.tar.gz

    • 删除旧版本

    如果系统中存在 cmake 旧版本,则删除旧版本。

    shell yum remove cmake -y

    • 编译安装

    shell cd cmake-3.6.3 ./bootstrap gmake sudo gmake install

    • 测试

    shell cmake --version @subsection autotoc_md7 输出 `cmake version 3.6.3` 即可

  • 安装下载 OpenCV
    • 方法一:从官网下载 OpenCV
    • 方法二:通过 wget 下载,自行解压编译安装

      shell wget https://codeload.github.com/opencv/opencv/zip/4.0.0

      以下介绍不做特别说明时,均以安装 OpenCV 4.0.0 为例。

    • 编译

      • 安装依赖库

      shell sudo yum install gtk2-devel python-devel numpy libdc1394-devel libv4l-devel gstreamer-plugins-base-devel ant libpng-devel jasper-devel openexr-devel libwebp-devel libjpeg-turbo-devel libtiff-devel

      • 解压 OpenCV

      shell unzip 4.0.0.zip

      • 创建并进入 build 目录

      shell cd opencv-4.0.0 mkdir build cd build

      • cmake

      shell cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D BUILD_SHARED_LIBS=OFF -D BUILD_PNG=ON -D BUILD_JASPER=ON -D BUILD_JPEG=ON -D BUILD_TIFF=ON -D BUILD_ZLIB=ON -D BUILD_OPENEXR=ON -D BUILD_IPP_IW=ON -D BUILD_ITT=ON -D BUILD_IPP_IW=ON -D BUILD_TBB=ON -D BUILD_WEBP=ON -D WITH_JPEG=ON -D WITH_PNG=ON -D WITH_JASPER=ON -D WITH_TIFF=ON WITH_OPENEXR=ON -D WITH_WEBP=ON -D WITH_ITT=ON -D WITH_IPP=ON -D WITH_GTK=ON -D WITH_GTK_2_X=ON ..

      • make

      shell make -j8 sudo make install

使用 Cmake 编译

  • 将库源代码引入到项目之中
    • 拷贝 include 将源代码中的 include 文件夹下的 common 目录以及 common.h 文件复制到工程的 include 目录下。
    • 拷贝 src 将源代码中的 src 文件夹下的 common 复制到工程的 src 目录下。
  • 编写 CmakeList.txt 将库文件加入到编译过程之中

    • 创建一个名为DEBUG_VALUE的变量,在进行整个项目的 CMake 编译时,当CMAKE_BUILD_TYPE变量为Debug时,将该变量设为 1。在本库的某些模块中,例如 debug 模块的特定方法调用时,需要启用该变量
    #[[设定编译器选项]]
    if(CMAKE_BUILD_TYPE MATCHES "Debug")
    message("-- Mode: ${CMAKE_BUILD_TYPE}") # Debug
    add_definitions(-DDEBUG_VALUE=1)
    else()
    message("-- Mode: ${CMAKE_BUILD_TYPE}") # Release
    add_definitions(-DDEBUG_VALUE=0)
    endif()
    • 导入 OpenCV 的库,找到系统安装的 OpenCV 的库位置
    #[[设定头文件搜索路径]]
    include_directories(/usr/local/include/opencv4)
    • 定位到项目 CmakeList.txt 中的 include_directories 和 file 下将文件自动加入编译之中
    #[[设定头文件搜索路径]]
    include_directories(${PROJECT_SOURCE_DIR}/include)
    #[[获取 src/common 目录中的需要使用的 .cpp 文件]]
    file(GLOB_RECURSE COMMON_SOURCE_FILES ${PROJECT_SOURCE_DIR}/src/common/*.cpp)
    #[[源文件添加到可执行文件]]
    add_executable(cpp_project ${COMMON_SOURCE_FILES})
  • 调用库模块

    项目的使用,可以导入头文件#include "common.h"快速使用,注意需要声明命名空间 cm

    比如(具体请参考文档)

    // 使用自定义的点
    点类
    Definition point.hpp:52

外部库依赖

OpenCV

  • 版本要求 >= 4.0.0
  • 依赖库
模块名 说明 项目是否必须
核心模块(core) 提供了图像处理、数组操作、矩阵运算等基本功能, Eigen 、zlib 、 libjpeg等 必须
图像 I/O 模块(imgcodecs) 用于读取和写入不同格式的图像文件,比如 libpng 、libjpeg 、 libtiff、libwebp 等 必须
绘图模块(imgproc) 提供了各种图像处理和绘图函数,如滤波、边缘检测、形态学操作、直方图等 必须
特征检测和描述子模块(features2d) 包括了各种特征点检测、描述子提取和匹配算法,如 SIFT、SURF、ORB 等 非必须
目标检测模块(objdetect) 提供了各种目标检测和识别算法,如 Haar 特征和级联分类器 非必须
机器学习模块(ml) 实现了一些常见的机器学习算法,如 k-最近邻、支持向量机等 非必须
深度学习模块(dnn) 集成了深度学习模型,可以使用预训练的神经网络进行图像分类、目标检测等 非必须
摄像机标定模块(calib3d) 提供了相机标定和立体视觉相关的函数和算法 非必须
视频 I/O 模块(videoio) 用于读取和写入视频文件,以及视频流的捕获和播放 非必须
图像配准和重建模块(stitching) 用于图像拼接和全景图像生成 非必须
计算机视觉工具箱模块(cv) 提供了各种计算机视觉的工具函数和类 必须
  • 安装教程

    详细参考 准备 中安装下载 OpenCV