Chu*_*lar 7 python opencv image image-rotation opencv3.1
我正在使用OpenCV 3.1和Python.
当我试图用文本去校正(修正倾斜)图像时,我的问题出现了.我正在使用cv2.warpPerspective它,但图像失去了很多质量.你可以在这里看到图像的原始部分:
然后,在这里,"旋转"的图像:
它就像平滑一样.
我正在使用形态转换,如:
kernel = np.ones((2, 2), np.uint8)
blur_image = cv2.erode(tresh, kernel, iterations=1)
Run Code Online (Sandbox Code Playgroud)
和
white_mask2 = cv2.morphologyEx(white_mask2, cv2.MORPH_OPEN, kernel)
Run Code Online (Sandbox Code Playgroud)
看它是否有所改善,但没有.
所以,我不知道我能做些什么.也许有一种方法可以不失去图像的质量,或者,还有另一种方法可以旋转图像而不会丢失质量.我知道这个方法:
root_mat = cv2.getRotationMatrix2D(to_rotate_center, angle, 1.0)
result = cv2.warpAffine(to_rotate, root_mat, to_rotate.shape, flags=cv2.INTER_LINEAR)
Run Code Online (Sandbox Code Playgroud)
但它对我不起作用,因为我必须在这里旋转每个矩形:
而不是整个形象.这意味着,我发现这样做的最好方法是warpPerspective,它工作正常,但质量下降.我希望得到一个避免质量损失的建议.
该问题与翘曲所需的插值有关.如果您不希望事物看起来更平滑,您应该从默认插值方法切换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
}
Run Code Online (Sandbox Code Playgroud)