图像失去cv2.warpPerspective的质量

我正在使用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)

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

我在这里看到了这个例子,但那些人有同样的问题: 在这里输入图像描述在这里输入图像描述

所以,我不知道我能做什么。 也许有一种方法不会丢失图像的质量,或者,还有另一种方法可以在不丢失质量的情况下旋转图像。 我知道这个方法:

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 ,它工作正常,但质量损失。 我希望有一个建议,以避免质量损失。


该问题与变形所需的插值有关。 如果您不想让事情看起来更顺畅,您应该从缺省插值方法(即INTER_LINEAR到另一个方法,如INTER_NEAREST 。 它会帮助你清晰的边缘。

在你的warp调用中尝试flags=cv2.INTER_NEAREST ,不管它是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 
}
链接地址: http://www.djcxy.com/p/50339.html

上一篇: Image loses quality with cv2.warpPerspective

下一篇: Scale image without losing image quality did not work