有没有办法用 PHP 和 Imagick 找到被黑色边框包围的特定像素区域?

Posted

技术标签:

【中文标题】有没有办法用 PHP 和 Imagick 找到被黑色边框包围的特定像素区域?【英文标题】:Is there any way to find a specific pixel area that is surrounded by a black border with PHP and Imagick? 【发布时间】:2022-01-10 21:00:54 【问题描述】:

我一直在尝试使用 Imagick 将我的 php 应用程序中的 PDF 文件转换为 PNG,以便我可以让 Tesseract OCR 的 PHP 库仅扫描文档中的手写文本。手写文本区域在文档中被黑色边框包围,并且由于某些 PDF 被扫描,它们可能会略微倾斜。

有什么方法可以使用 Imagick 从 PDF 中创建仅带边框的框的图像?我尝试查看 Imagick 文档并尝试使用 despeckleImage()trimImage(),但由于图像中的一些模糊像素,我只能修剪一点。

包含手写文本的框是我想要获取图像的框,以便我可以扫描其中的文本。 This imgur link 有我一直在使用的两种扫描。第一个根本没有绒毛,但第二个是带绒毛的扫描。我不知道如何解决这个问题,因为库中有很多函数,所以如果你们有任何想法,将不胜感激。

【问题讨论】:

【参考方案1】:

您可以使用连接组件在 ImageMagick 命令行中执行此操作。我不知道 PHP Imagick 是否可以做到这一点。不过你可以查。否则,只需使用 PHP exec() 来运行我的命令。

以下是 Unix 语法。

输入:

bbox=`convert Ef82Whf_d.webp -threshold 75% -type bilevel \
-define connected-components:exclude-header=true \
-define connected-components:area-threshold=500 \
-define connected-components:keep-top=1 \
-define connected-components:verbose=true \
-define connected-components:mean-color=true \
-connected-components 8 null: | \
grep "gray(255)" | tail -n +2 | awk 'print $2'`
convert Ef82Whf_d.webp -crop $bbox +repage -shave 5x5 textbox_crop.png

【讨论】:

在做了更多研究之后,不幸的是,似乎没有办法在 PHP 的 Imagick 扩展中使用连接组件。这是一个很好的答案。感谢您的帮助! 你可以从 PHP exec() 调用我的命令。

以上是关于有没有办法用 PHP 和 Imagick 找到被黑色边框包围的特定像素区域?的主要内容,如果未能解决你的问题,请参考以下文章

公司网站被黑 跳转到彩票网站的处理解决办法

PHP Imagick UwAmp 安装不工作

没有 Imagick 的图像调整大小并失去透明度

PHP扩展之 Imagick安装

用php为imagick设置密度参数

ThinkPHP使用Imagick给图片加文字