我正在尝试编写一个函数,该函数将使用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;
}
答案 0 :(得分:2)
您可以使用Imagemagick中的连接组件来执行此操作。过滤掉所有小的文本字符区域,只留下较大的表轮廓。然后获取表格的边界框,并使用其裁剪原始图像。设置面积阈值,以使表格行中的像素数大于阈值,而其他所有像素均小于阈值。
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=27或https://github.com/dlemstra/Magick.NET
与Magick.NET开发人员进行讨论。