Pynote

Python、機械学習、画像処理について

OpenCV - 画像を回転、反転させる方法について

任意の角度回転させる。

以下の手順で任意の角度だけ回転できる。

1. getRotationMatrix2D で回転行列を作成する。
2. warpAffine で回転行列を画像に適用する。

import cv2
import matplotlib.pyplot as plt

# 画像を読み込む。
img = cv2.imread("sample.png")

# 反時計回りに画像の中心回りに120度回転するアフィン変換行列を作成する。
h, w = img.shape[:2]
M = cv2.getRotationMatrix2D(center=(w / 2, h / 2), angle=120.0, scale=1.0)

# 画像にアフィン変換行列を適用する。
dst = cv2.warpAffine(img, M, dsize=(w, h))

plt.imshow(cv2.cvtColor(dst, cv2.COLOR_BGR2RGB))
plt.title("rotate 120 degree in ccw")
plt.show()


画像を 90°、180°、270° 回転させる

cv2.rotate で画像を90度単位で画像を回転できる。

dst = cv2.rotate(src, rotateCode[, dst])

  • 引数
    • src: 入力画像
    • rotateCode:
      • cv2.ROTATE_90_CLOCKWISE: 反時計回りに270° (時計回りに90°) 回転する。
      • cv2.ROTATE_180: 反時計回りに180° (時計回りに180°) 回転する。
      • cv2.ROTATE_90_COUNTERCLOCKWISE: 反時計回りに90° (時計回りに270°) 回転する。
  • 返り値
    • dst: 出力画像

反時計回りに90° (時計回りに270°) 回転させる。

import cv2
import matplotlib.pyplot as plt

# 画像を読み込む。
img = cv2.imread("sample.png")

# 反時計回りに90° (時計回りに270°) 回転させる。
dst = cv2.rotate(img, cv2.ROTATE_90_COUNTERCLOCKWISE)

plt.imshow(cv2.cvtColor(dst, cv2.COLOR_BGR2RGB))
plt.title("rotate 90 degree in ccw")
plt.show()


反時計回りに180° (時計回りに180°) 回転させる。

import cv2
import matplotlib.pyplot as plt

# 画像を読み込む。
img = cv2.imread("sample.png")

# 反時計回りに180° (時計回りに180°) 回転させる。
dst = cv2.rotate(img, cv2.ROTATE_180)

plt.imshow(cv2.cvtColor(dst, cv2.COLOR_BGR2RGB))
plt.title("rotate 180 degree in ccw")
plt.show()


反時計回りに270° (時計回りに90°) 回転する。

import cv2
import matplotlib.pyplot as plt

# 画像を読み込む。
img = cv2.imread("sample.png")

# 反時計回りに270° (時計回りに90°) 回転する。
dst = cv2.rotate(img, cv2.ROTATE_90_CLOCKWISE)

plt.imshow(cv2.cvtColor(dst, cv2.COLOR_BGR2RGB))
plt.title("rotate 270 degree in ccw")
plt.show()


画像を反転する。

cv2.flip で画像を上下左右反転できる。

dst = cv2.flip(src, flipCode[, dst])

  • 引数
    • src: 入力画像
    • flipCode:
      • 0: 上下反転する。
      • 1: 左右反転する。
      • -1: 上下左右反転する。
  • 返り値
    • dst: 出力画像

上下反転する。

import cv2
import matplotlib.pyplot as plt

# 画像を読み込む。
img = cv2.imread("sample.png")

# 上下反転する。
dst = cv2.flip(img, 0)
plt.imshow(cv2.cvtColor(dst, cv2.COLOR_BGR2RGB))
plt.title("flip vertical")
plt.show()


左右反転する。

import cv2
import matplotlib.pyplot as plt

# 画像を読み込む。
img = cv2.imread("sample.png")

# 左右反転する。
dst = cv2.flip(img, 1)
plt.imshow(cv2.cvtColor(dst, cv2.COLOR_BGR2RGB))
plt.title("flip horizontal")
plt.show()


上下左右反転する。

import cv2
import matplotlib.pyplot as plt

# 画像を読み込む。
img = cv2.imread("sample.png")

# 上下左右反転する。
dst = cv2.flip(img, -1)
plt.imshow(cv2.cvtColor(dst, cv2.COLOR_BGR2RGB))
plt.title("flip vertical and horizontal")
plt.show()