裁剪不需要的黑色图像空间

时间:2017-01-28 15:12:05

标签: python image opencv image-processing opencv3.0

我有一组灰度图像,如下所示:

enter image description here

这是一个示例图像,因为我无法发布原始图像。每个图像都有一个带纹理的区域,一个纯白色水印(pos)和许多不需要的黑色空间。

理想情况下,此图片应裁剪为:

enter image description here

每张图片中的水印可能略有不同,但纯白色文字总是非常薄。

图片看起来非常不同,这是另一个例子

enter image description here

这个只需要在左边裁剪

enter image description here

另一个:

enter image description here

这个需要在顶部和底部裁剪:

enter image description here

和另一个

enter image description here

这个需要在顶部和右侧裁剪。请注意,我在此图片中留下了水印。理想情况下,水印也会被删除,但我想没有它会更容易。

这是水印的图片,它在现实中的样子。

enter image description here

图像大小不一,但通常很大(超过2000x2000)。

我正在寻找python中的解决方案(也许是cv2)。

我的第一个想法是使用这样的东西: Python & OpenCV: Second largest object

但此解决方案代码对我失败

1 个答案:

答案 0 :(得分:0)

我在C#和C ++中工作并且不在python中工作,但可以向你推荐逻辑。

您需要对图像进行两次扫描,一行扫描,另一行扫描。

由于您说图像的不需要部分始终是黑色,因此只需读取两次扫描中的像素值。如果某行中所有像素的颜色为黑色,则可以选择或删除该行。列式扫描可以遵循类似的步骤。

现在我们不能如此轻易地消除行和列,所以只需记下冗余的行和列,然后使用以下代码裁剪图像:(我将使用emgucv库在C#中编码,但它很容易理解for python)

Mat original_image = new Mat();
Rect ROI = new Rect(x,y,width,height);
Mat image_needed_to_crop = new Mat(original_image,ROI);

此代码仅从原始图像中提取感兴趣的区域。