图像因cv2.warpPerspective而失去质量

时间:2016-09-07 13:39:51

标签: python image opencv image-rotation opencv3.1

我正在使用OpenCV 3.1和Python。

当我尝试使用文本偏斜(修正倾斜)图像时出现问题。我使用 while (it != recursive_directory_iterator()) { if (it->path().filename() == "A") { it.disable_recursion_pending(); } ++it; } 使其成为可能,但图像失去了很多质量。你可以在这里看到图像的原始部分:

image without smooth

然后,在这里,"旋转"图像:

image with smooth

就像平滑一样。

我正在使用形态转换,如:

cv2.warpPerspective

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

看看它是否有所改善,但没有。

我看到了this example here in SO,但那些人有同样的问题: enter image description hereenter image description here

所以,我不知道我该怎么做。 也许有一种方法可以不失去图像的质量,或者,有另一种方法来旋转图像而不会丢失质量。 我知道这个方法:

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

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

enter image description here

而不是整个图像。这意味着,我发现它的最佳方式是root_mat = cv2.getRotationMatrix2D(to_rotate_center, angle, 1.0) result = cv2.warpAffine(to_rotate, root_mat, to_rotate.shape, flags=cv2.INTER_LINEAR) ,它工作正常,但质量下降。我希望得到一个避免质量损失的建议。

1 个答案:

答案 0 :(得分:6)

问题与扭曲所需的插值有关。如果您不希望事物看起来更平滑,则应该从默认插值方法(INTER_LINEAR)切换到另一个方法,例如INTER_NEAREST。它可以帮助你清晰的边缘。

flags=cv2.INTER_NEAREST来电,warpAffine()warpPerspective()上试试warp

列出插值标志here

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 
}