python - 在数字周围裁剪可能位于矩形区域内任何地方的正方形区域

标签 python opencv

我有一个矩形区域(白色背景),数字(黑色)可能位于其中的任何地方。当我将此图像传递到MNIST模型中时,由于数字被压缩,因此预测效果不佳。我想在数字附近切出一个正方形。

OpenCV是否对此具有任何功能?是否可以水平检测第一个非白色像素,以便我可以裁剪出从该像素开始的区域?

最佳答案

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

让我们看一下以下代码片段:

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如下所示:

img

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

crop

现在,当然,图像不是您所要求的正方形。因此,需要做更多的工作来获得最大的wh并正确裁剪子图像。此外,您还必须检查是否违反图像边界等。这就是我将要付出的全部努力。 :-)

希望有帮助!

关于python - 在数字周围裁剪可能位于矩形区域内任何地方的正方形区域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56558582/

相关文章:

python-2.7 - Python中的车辆检测、计数和分类

python - 追加到 XML 标记内的文本

python - django 在 syncdb 时不加载初始固定装置

python - PyQt QFileDialog exec_ 很慢

c++ - 使用opencv c++对相同的面孔进行分组

c++ - 如何在opencv中设置相机fps?

php - Soap 错误解析模式 : can't import schema from unexpected targetNamespace

python - Django - 'ContactForm' 对象没有属性 'get'

python - 二维对象跟踪中卡尔曼滤波器没有输出

OpenCV圆畸变检测