【问题标题】:Cropping square area around digit which may lie anywhere in a rectangle area裁剪数字周围的正方形区域,该区域可能位于矩形区域的任何位置
【发布时间】:2019-10-26 18:06:16
【问题描述】:

我有一个矩形区域(白色背景),数字(黑色)可能位于其中的任何位置。当我将此图像传递给 MNIST 模型时,由于数字被压缩,因此预测效果并不好。我想在数字周围裁剪出一个正方形。

OpenCV 有这方面的功能吗?是否可以水平检测第一个非白色像素,以便我可以从该像素开始裁剪区域?

【问题讨论】:

    标签: python opencv


    【解决方案1】:

    这可以通过使用 OpenCV 中的 boundingRect 函数来实现。因此,您只需将输入图像反转,这样您就有黑色背景和白色数字。

    我们看看下面的sn-p代码:

    import cv2
    import numpy as np
    
    # Set up test image, white background, black letter with anti-aliasing
    img = 255 * np.ones((50, 50), np.uint8)
    cv2.putText(img, 't', (20, 30), cv2.FONT_HERSHEY_COMPLEX, 1.0, 0, 3, cv2.LINE_AA)
    
    # Generate inverse image (black background, white letter)
    inv = 255 - img
    
    # Detect bounding rectangle for any non-zero pixels
    x, y, w, h = cv2.boundingRect(inv)
    
    # Generate cropped image from obtained parameters
    crop = img[y:y+h, x:x+w]
    
    # Output
    cv2.imshow('img', img)
    cv2.imshow('crop', crop)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    

    测试图像img如下所示:

    而且,裁剪后的图像crop 看起来像这样:

    现在,当然,图像不是您要求的方形。因此,需要做进一步的工作来获得wh 的最大值并正确裁剪子图像。此外,您必须检查不违反图像边界等。这就是我将留给您的所有工作。 :-)

    希望有帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-27
      • 2015-10-18
      • 2012-10-13
      • 1970-01-01
      • 2013-02-26
      • 1970-01-01
      • 1970-01-01
      • 2011-11-10
      相关资源
      最近更新 更多