2016-09-07 9 views
1

私はOpenCV 3.1とPythonで作業しています。イメージがcv2.warpPerspectiveで品質を失う

イメージをテキストで傾きを修正する(修正する)ときに問題が発生します。私はそれを可能にするためにcv2.warpPerspectiveを使用していますが、イメージは多くの品質を失います。それはようを平滑化する

image with smooth

image without smooth

とは、その後、ここでは、画像を "回転":あなたは、ここで画像の元の部分を見ることができます。

私のような形態変換を使用していた:それは何か、何もし改善されるかどうかを確認するために

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を見たが、それらの人が同じ問題を抱えていた

enter image description hereenter 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) 

をしかし、私はここにすべての長方形を回転させるために持っているとして、それは、私のために動作しません:

enter image description here

ではなく画像全体を。それは、私がそれを行うために見つけた最良の方法は、warpPerspectiveであり、それは正常に動作しますが、品質が低下することを意味します。私は失われた品質を避けるための助言に感謝します。

答えて

2

問題は、ワーピングで必要な補間に関連しています。物がより滑らかに見えないようにするには、INTER_LINEARのデフォルトの補間方法から別の補間方法(INTER_NEARESTなど)に切り替える必要があります。それはエッジの鋭さであなたを助けるでしょう。

コールで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 
} 
+0

美しい人!ありがとうございました:)問題はcv2.INTER_LINEARにありました。 –

関連する問題