cv2.warpPerspective 导致图像质量下降
Posted
技术标签:
【中文标题】cv2.warpPerspective 导致图像质量下降【英文标题】:Image loses quality with cv2.warpPerspective 【发布时间】:2017-01-15 05:44:54 【问题描述】:我正在使用 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)
看看它是否改进了一些东西,但没有。
我看到了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
,它工作正常,但质量下降。我将不胜感激避免质量损失的建议。
【问题讨论】:
【参考方案1】:问题与翘曲所需的插值有关。如果您不想让事情看起来更平滑,您应该从默认的插值方法(INTER_LINEAR
)切换到另一种插值方法,例如INTER_NEAREST
。它可以帮助您提高边缘的清晰度。
在您的warp
呼叫中尝试flags=cv2.INTER_NEAREST
,无论是warpAffine() 还是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
【讨论】:
美男子!谢谢 :) 问题出在 cv2.INTER_LINEAR。以上是关于cv2.warpPerspective 导致图像质量下降的主要内容,如果未能解决你的问题,请参考以下文章