【问题标题】:Trimming the white space in an image using PIL in python在python中使用PIL修剪图像中的空白
【发布时间】:2018-04-02 09:54:52
【问题描述】:

我正在使用 SciKit-learn 进行手写数字识别,因此我需要裁剪点击的图片,因此我在 Word 上准备了一个模板。 现在我想要的是沿边框裁剪的图像,以便我可以进一步裁剪它以提取数字。
示例图片如下:

为了裁剪图像,我使用this 代码。

下面是上面的矩形被裁剪的父图像:

注意:父图像也有边框(在图像中不可见),因此修剪空白区域可能有助于获得修改后的父图像,以便预定义(高度、宽度)对于各种作物几乎相同在图像上完成。

【问题讨论】:

  • 您尝试裁剪所需的矩形是什么?
  • @ZdaR 我使用提到的代码只是为了进一步裁剪给定的矩形(通过提供crop_type='top/middle/bottom')但我得到了我没有的边框周围的空白区域不想
  • 那你需要专门定义裁剪范围。
  • 有没有办法简单地沿边框裁剪图像。因为这对我处理任何图像都有帮助,只需修剪空白区域,以便每个图像的预定义(宽度、高度)裁剪都是相同的。实际上,我必须在单个图像上进行各种裁剪。您可以查看从中裁剪矩形的父图像的问题。 @ZdaR

标签: python opencv python-imaging-library cv2


【解决方案1】:

您可以应用此管道:转换为灰度 -> 应用阈值处理(转换为白色和黑色)-> 查找轮廓 -> 选择正确形状的轮廓。

这里是示例代码:

#!/usr/bin/env python

import cv2

BLACK_THRESHOLD = 200
THIN_THRESHOLD = 10
ANNOTATION_COLOUR = (222,0,222)

img = cv2.imread('template.png')
orig = img.copy()
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
thresh = cv2.threshold(gray, thresh=BLACK_THRESHOLD, maxval=255, type=cv2.THRESH_BINARY_INV)[1]

# Optional: save thesholded image
cv2.imwrite("temp_thres.png", thresh)

# Find contours on the thresholded image
contours = cv2.findContours(thresh,cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[1]
for cont in contours:
    # Find bounding rectangle of a contour
    x,y,w,h = cv2.boundingRect(cont)
    # Skip thin contours (vertical and horizontal lines)
    if h<THIN_THRESHOLD or w<THIN_THRESHOLD:
        continue
    # Does the countour has the right shape (roughly four times longer than high)?
    if 3*h<w<5*h:
        roi = orig[y:y+h,x:x+w]
        cv2.imwrite("four_letters.png",roi)

    # Optional: draw annotations
    cv2.rectangle(img,(x,y),(x+w,y+h),ANNOTATION_COLOUR,3)

# Optional: save annotated image
cv2.imwrite("temp_cont.png",img)

(可以删除三个可选步骤。它们仅用于生成图像temp_thres.pngtemp_cont.png。)

输入图片template.png

阈值图像temp_thres.png:

找到轮廓temp_cont.png

四个字母空格four_letters.png:

【讨论】:

  • 精彩的解释 赞!刚刚开始工作。我在提取这些轮廓时遇到了一个问题,它返回了一些重复项。那么我应该发布另一个问题吗?你能帮助我吗?谢谢干杯! @Andriy Makukha
  • 如果假设我正在围绕一个数字绘制轮廓,那么它会根据层次结构开始绘制轮廓。如果我只想要边界周围的轮廓怎么办,这样轮廓所包围的区域就不会有噪音。如何做呢 ?你能建议我任何文件或链接吗?谢谢@Andiry Makukha
猜你喜欢
  • 2019-04-08
  • 2017-12-03
  • 2019-10-31
  • 1970-01-01
  • 2014-09-01
  • 2021-08-15
  • 2013-10-27
  • 2012-05-23
  • 2011-11-23
相关资源
最近更新 更多