图片质量下降 cv2.warpPerspective
Image loses quality with cv2.warpPerspective
我正在使用 OpenCV 3.1 和 Python。
当我尝试对带有文本的图像进行校正(修复倾斜)时,我的问题就来了。我正在使用 cv2.warpPerspective
使其成为可能,但图像质量下降了很多。你可以在这里看到图片的原始部分:
然后,这里是 "rotated" 图片:
它就像平滑。
我正在使用像这样的形态转换:
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)
看看它是否有所改善,但没有任何改善。
我看到了this example here in SO,但是那些人有同样的问题:
and
所以,我不知道我能做什么。
也许有一种方法可以不损失图像质量,或者,还有另一种方法可以在不损失质量的情况下旋转图像。
我知道这个方法:
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_NEAREST
,即 INTER_LINEAR
。它将帮助您处理边缘的锐度。
在您的 warp
通话中尝试 flags=cv2.INTER_NEAREST
,无论是 warpAffine() or warpPerspective()。
已列出插值标志 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
}
我正在使用 OpenCV 3.1 和 Python。
当我尝试对带有文本的图像进行校正(修复倾斜)时,我的问题就来了。我正在使用 cv2.warpPerspective
使其成为可能,但图像质量下降了很多。你可以在这里看到图片的原始部分:
然后,这里是 "rotated" 图片:
它就像平滑。
我正在使用像这样的形态转换:
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)
看看它是否有所改善,但没有任何改善。
我看到了this example here in 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
,它工作正常,但有质量损失。我将不胜感激避免质量损失的建议。
问题与扭曲所需的插值有关。如果您不想让事情看起来更平滑,您应该从默认插值方法切换到另一种方法,例如 INTER_NEAREST
,即 INTER_LINEAR
。它将帮助您处理边缘的锐度。
在您的 warp
通话中尝试 flags=cv2.INTER_NEAREST
,无论是 warpAffine() or warpPerspective()。
已列出插值标志 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
}