使用C#在图像中查找表

时间:2019-01-04 14:55:15

标签: c# imagemagick emgucv aforge magick.net

我正在尝试编写一个函数,该函数将使用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;
}

enter image description here

1 个答案:

答案 0 :(得分:2)

您可以使用Imagemagick中的连接组件来执行此操作。过滤掉所有小的文本字符区域,只留下较大的表轮廓。然后获取表格的边界框,并使用其裁剪原始图像。设置面积阈值,以使表格行中的像素数大于阈值,而其他所有像素均小于阈值。

输入: enter image description here

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


enter image description here

enter image description here

对不起,我不知道Magick.NET。但您可以通过https://imagemagick.org/discourse-server/viewforum.php?f=27https://github.com/dlemstra/Magick.NET

与Magick.NET开发人员进行讨论。