Interface2017年05月号新画像処理101を読む

4-3 ひずみ補正等に使える並行四辺形変換「スキュー変換(垂直)」

import math as m

img_src = cv2.imread("data/img_4-3.bmp")
eight,width,ch = img_src.shape
"""
warpAffine
画像のアフィン変換を行います.

パラメタ:
src – 入力画像
M – 2×3 の変換行列
dsize – 出力画像のサイズ
flags – 補間手法( resize() を参照してください)と, M が逆変換( dst  \rightarrow src )であることを意味するオプションフラグ WARP_INVERSE_MAP の組み合わせ
borderMode – ピクセル外挿手法. borderInterpolate() を参照してください. borderMode = BORDER_TRANSPARENT の場合,入力画像中の「はずれ値」に対応する出力画像中のピクセルが,この関数では変更されないことを意味します
borderValue – 定数境界モードで利用されるピクセル値.デフォルトでは 0 です
"""
deg = m.tan(m.pi/6)
mat = np.float32(
[[1,0,0],
[-deg,1,eight-1]])

img_dst = cv2.warpAffine(img_src,mat,(width,int(eight+width*deg)))
#描画する
cv2.imshow("img_src",img_src)
cv2.imshow("img_dst",img_dst)
cv2.waitKey(0)
cv2.destroyAllWindows()

f:id:bitop:20180224112900p:plain

f:id:bitop:20180224112937p:plain