0

我正在尝试编写一个函数,该函数将获取图像并返回一个图像列表,其中仅包含使用 EMGU.CV 或 Magick.Net 或 AForge.Net 的表格,例如对于下图,该函数应返回 2 个带有两个表格的图像在图像中。

private static List<Image> FindTables(Image img)
{
    var masterImage = (Bitmap)img;
    var image = new Image<Gray, byte>(masterImage);
    var copyImg = new Image<Bgr, byte>(masterImage);
    List<Image> tables = new List<Images>
    //Find all tables and add to tables variable
    return tables;
}

在此处输入图像描述

4

1 回答 1

3

您可以使用 Imagemagick 中的连接组件来做到这一点。过滤掉所有小的区域,即文本字符,只留下较大的表格轮廓。然后获取表格的边界框并使用它们来裁剪原始图像。设置 area-threshold 使表格行中的像素数大于阈值,而其他所有内容都小于阈值。

输入: 在此处输入图像描述

IFS=" "
OLDIFS=$IFS
IFS=$'\n'
bboxArr=(`convert image.png -alpha off -type bilevel \
-define connected-components:verbose=true \
-define connected-components:area-threshold=500 \
-connected-components 4 \
null: | grep "gray(0)" | awk '{print $2}'`)
num=${#bboxArr[*]}
IFS=$OLDIFS
for ((i=0; i<num; i++)); do
convert image.png -crop ${bboxArr[$i]} +repage image$i.png
done


在此处输入图像描述

在此处输入图像描述

抱歉,我不知道 Magick.NET。但是您可以通过https://imagemagick.org/discourse-server/viewforum.php?f=27https://github.com/dlemstra/Magick.NET与 Magick.NET 开发人员讨论

于 2019-01-04T19:12:51.887 回答