8

我正在使用 OpenCV 3.1 和 Python。

当我尝试用文本歪斜(修复倾斜)图像时,我的问题就出现了。我正在使用cv2.warpPerspective它来实现它,但是图像质量下降了很多。您可以在这里看到图像的原始部分:

没有平滑的图像

然后,这里是“旋转”的图像:

图像平滑

它就像平滑

我正在使用形态变换,例如:

kernel = np.ones((2, 2), np.uint8)
blur_image = cv2.erode(tresh, kernel, iterations=1)

white_mask2 = cv2.morphologyEx(white_mask2, cv2.MORPH_OPEN, kernel)

看看它是否改善了一些东西,但没有。

在 SO 中看到了这个例子,但是那些人也有同样的问题 在此处输入图像描述在此处输入图像描述

所以,我不知道我能做什么。也许有一种方法可以不损失图像质量,或者,还有另一种方法可以旋转图像而不会损失质量。我知道这种方法:

root_mat = cv2.getRotationMatrix2D(to_rotate_center, angle, 1.0)
result = cv2.warpAffine(to_rotate, root_mat, to_rotate.shape, flags=cv2.INTER_LINEAR)

但这对我不起作用,因为我必须在这里旋转每个矩形:

在此处输入图像描述

而不是整个图像。这意味着,我发现最好的方法是warpPerspective,它工作正常,但质量损失。我将不胜感激避免质量损失的建议。

4

1 回答 1

12

该问题与翘曲所需的插值有关。如果您不想让事情看起来更平滑,您应该从默认的插值方法切换INTER_LINEAR到另一种方法,例如INTER_NEAREST. 它将帮助您提高边缘的清晰度。

试试flags=cv2.INTER_NEAREST你的warp电话,无论是warpAffine()还是warpPerspective()

此处列出了插值标志。

enum InterpolationFlags { 
    INTER_NEAREST = 0, 
    INTER_LINEAR = 1, 
    INTER_CUBIC = 2, 
    INTER_AREA = 3, 
    INTER_LANCZOS4 = 4, 
    INTER_MAX = 7, 
    WARP_FILL_OUTLIERS = 8, 
    WARP_INVERSE_MAP = 16 
}
于 2016-09-07T14:20:53.887 回答