はじめに
画像を極座標変換したい時(アナログメータを解析したい時とか)のメモです。
下の例は時計ですが、、、🦔
どうやら、OpenCV3系にあったlinearPolar()やlogPolar()は非推奨となったようなので、warpPolar()を使用しています。
ソースコード
ソースコード全文は以下リポジトリを参照ください。
本投稿には抜粋したものを記載しています。
Kazuhito00/cv-warpPolar-example
cv-warpPolar-exampleは、OpenCVでの極座標変換/逆変換の実行例です。 |
極座標への線形変換
# キュービック補間 + 外れ値塗りつぶし + 極座標へリニアマッピング
flags = cv2.INTER_CUBIC + cv2.WARP_FILL_OUTLIERS + cv2.WARP_POLAR_LINEAR
# 引き数:画像, 変換後サイズ(幅、高さ)、中心座標(X座標、Y座標)、半径、変換フラグ
linear_polar_image = cv2.warpPolar(image, (300, 1000), (480, 270), 220, flags)
極座標からの逆変換
# 逆変換(リニア)
flags = cv2.INTER_CUBIC + cv2.WARP_FILL_OUTLIERS + cv2.WARP_POLAR_LINEAR + cv2.WARP_INVERSE_MAP
linear_polar_inverse_image = cv2.warpPolar(linear_polar_image, (960, 540), (480, 270), 220, flags)
対数極座標への線形変換
# キュービック補間 + 外れ値塗りつぶし + 対数極座標へリニアマッピング
flags = cv2.INTER_CUBIC + cv2.WARP_FILL_OUTLIERS + cv2.WARP_POLAR_LOG
# 引き数:画像, 変換後サイズ(幅、高さ)、中心座標(X座標、Y座標)、半径、変換フラグ
log_polar_image = cv2.warpPolar(image, (300, 1000), (480, 270), 220, flags)
極座標からの逆変換
# 逆変換(対数)
flags = cv2.INTER_CUBIC + cv2.WARP_FILL_OUTLIERS + cv2.WARP_POLAR_LOG + cv2.WARP_INVERSE_MAP
log_polar_inverse_image = cv2.warpPolar(log_polar_image, (960, 540), (480, 270), 220, flags)
参考
OpenCV Geometric Image Transformations
以上。