Image processing 自动裁剪图像(自动识别图像与背景)

Image processing 自动裁剪图像(自动识别图像与背景),image-processing,crop,Image Processing,Crop,我正在寻找一种裁剪上传图像的方法。我花了很多时间搜索网站,如果用户提供要裁剪的尺寸/位置,我会找到很多好的解决方案 我的照片大多是在深色背景下拍摄的纸片。想象一下,驾驶执照、信用卡、车票存根的手机镜头,背景稍微暗一些(但不是标准的)。我正在寻找一种方法,可以在上传之前或之后让我的代码识别应该裁剪的内容 在一个完美的世界里,一些聪明人会建议裁剪什么,并给用户一个机会给它一个最终批准。这将允许一个不太完美的裁剪算法 在根据第一个答案查找“trim”而不是crop之后,我似乎可以使用Imagemagi

我正在寻找一种裁剪上传图像的方法。我花了很多时间搜索网站,如果用户提供要裁剪的尺寸/位置,我会找到很多好的解决方案

我的照片大多是在深色背景下拍摄的纸片。想象一下,驾驶执照、信用卡、车票存根的手机镜头,背景稍微暗一些(但不是标准的)。我正在寻找一种方法,可以在上传之前或之后让我的代码识别应该裁剪的内容

在一个完美的世界里,一些聪明人会建议裁剪什么,并给用户一个机会给它一个最终批准。这将允许一个不太完美的裁剪算法

在根据第一个答案查找“trim”而不是crop之后,我似乎可以使用Imagemagick Imagemagick.org/script/api.php来完成这项工作


Imagemagick似乎在PHP和Ruby中有接口。它支持对边界不一致的“模糊”图像进行修剪。我正在寻找建议的问题是关于图形引擎的建议,该引擎具有良好的逻辑来查找图像的边缘。有没有比imagemagick更好的引擎

要意识到,在每像素的基础上,要裁剪出的背景是不一致的。存在细微(有时不太细微)的变化,您需要使用公差来解释这些变化

如果您熟悉Adobe Photoshop,则有一个函数可以精确执行您的建议(图像->修剪)。它的工作原理是查看用户选择的角点像素(左上角、右上角等),然后确定不是该颜色的最外围像素

在编程中,您需要迭代图像中的像素,并确定不是所选颜色的最顶部和最底部像素的Y坐标,以及最左侧和最右侧像素的X坐标。然后,这些坐标确定裁剪尺寸

在决定像素是否为所选颜色时,可以通过允许百分比差异因子来引入公差。换句话说,如果背景不是一致的白色(RGB 255、255、255),您可能需要考虑一些变化


您没有提到编程语言,因此您需要研究您可能想要利用的图形库和函数。

查看以下结果是否令人满意。我用Mathematica实现了一个小程序。如果您喜欢结果,我可以进一步解释算法,或者您可以自己在线查看Mathematica帮助文件

我们从这些图像开始:

并定义以下功能:

f[image_] := 
 ImageCrop@
   ImageMultiply[image, 
    ColorNegate@
     Erosion[Dilation[
       DeleteSmallComponents[Binarize@ColorNegate@image, 10000], 3], 
      3]] // ImageAdjust  
结果是:


一个可能有用的短语是“显著性”——识别图像的“有趣”区域。开始研究这个的一个地方是——你可以用“有趣的部分”来描述图像的例子。这是否达到了您的要求?

如果有一种方法可以使页面上没有出现统一的颜色背景,您可以非常轻松地选择背景像素并使用它们来定位裁剪边界。您对“引擎”的选择取决于您的目标语言。你在用什么?这很有用。。。我的第一个问题是我想的是修剪而不是修剪。。看起来我可以做到这一点,这些结果非常令人印象深刻。请你再详细解释一下好吗?我想实现类似的东西——虽然可能使用Mathematica来代替.BJMC:只使用PIL将使任务变得困难,考虑至少使用OpenCV使用SICPY。Mathematica代码中的所有步骤都很简单,
二值化
使用otsu阈值,
删除小组件
可以使用
scipy.ndimage.label
复制,侵蚀和膨胀随时可用。但是,这段代码对于差异不大的图像来说是失败的。用这个精确的代码来考虑图像,结果。检查。