您似乎没有得到任何OpenCV答案,所以我尝试了ImageMagick,就在命令行的终端中。ImageMagick安装在大多数 Linux 发行版上,可免费用于 macOS 和 Windows。该技术很容易适应OpenCV,因此如果它适合您,您可以将其移植。
我的第一步是做一个 5x5 的盒子过滤器和 80% 的阈值,以消除噪声和扫描伪影,然后反转(可能是因为我打算使用形态学,但最终没有)。
convert news.jpg -depth 16 -statistic mean 5x5 -threshold 80% -negate z.png
然后我通过“连接组件分析”运行它并丢弃所有面积太小(低于 2000 像素)的 blob:
convert news.jpg -depth 16 -statistic mean 5x5 -threshold 80% -negate \
-define connected-components:verbose=true \
-define connected-components:area-threshold=2000 \
-connected-components 4 -auto-level output.png
输出
Objects (id: bounding-box centroid area mean-color):
110: 1254x723+59+174 686.3,536.0 901824 srgb(0,0,0)
2328: 935x723+59+910 526.0,1271.0 676005 srgb(0,0,0)
0: 1370x1692+0+0 685.2,712.7 399651 srgb(0,0,0)
2329: 303x722+1007+911 1158.0,1271.5 218766 srgb(0,0,0)
25: 1262x40+54+121 685.2,140.5 49820 srgb(255,255,255)
109: 1265x735+54+168 708.3,535.0 20601 srgb(255,255,255)
1: 1274x64+48+48 675.9,54.5 16825 srgb(255,255,255)
2326: 945x733+54+905 526.0,1271.0 16660 srgb(255,255,255)
2327: 312x732+1003+906 1169.9,1271.5 9606 srgb(255,255,255) <--- THIS ONE
421: 403x15+328+342 528.6,350.1 4816 srgb(255,255,255)
7: 141x23+614+74 685.5,85.2 2831 srgb(255,255,255)
这些字段在第一行中标记,但有趣的是第二个(块几何)和第四个字段(斑点区域)。如您所见,有 11 行,所以它在图像中找到了 11 个斑点。第二个字段,AxB+C+D
表示一个矩形A
像素宽乘B
像素高,其左上角C
像素从图像的左边缘开始,D
像素从顶部向下。
让我们看看我用箭头标记的那个,它开始2327: 312x732+1003+906
并在那个上面画一个矩形:
convert news.jpg -fill "rgba(255,0,0,0.5)" -draw "rectangle 1003,906 1315,1638" oneArticle.png
如果您想将该文章裁剪为新图像:
convert news.jpg -crop 312x732+1003+906 article.jpg
如果我们绘制所有其他框,我们得到: