OpenCVのcopyMakeBorder関数を使用した画像の境界拡張


まず最初に、copyMakeBorder関数の構文を見てみましょう。

dst = cv2.copyMakeBorder(src, top, bottom, left, right, borderType[, dst, value])
  • src: 入力画像
  • top: 上部の境界拡張のサイズ
  • bottom: 下部の境界拡張のサイズ
  • left: 左側の境界拡張のサイズ
  • right: 右側の境界拡張のサイズ
  • borderType: 境界のタイプを指定する定数
  • dst: 出力画像(オプション)
  • value: 境界領域の値(オプション)

境界のタイプ(borderType)には、以下の定数が使用されます:

  • cv2.BORDER_CONSTANT: 一定の値で境界を埋めます。
  • cv2.BORDER_REPLICATE: 画像の端のピクセル値を境界にコピーします。
  • cv2.BORDER_REFLECT: 画像を反転させ、反転した部分を境界にコピーします。
  • cv2.BORDER_WRAP: 画像を反転させ、反転した部分を繰り返し境界にコピーします。

以下に、いくつかの具体的な例を示します。

例1: 一定の値で境界を埋める

import cv2
import numpy as np
image = cv2.imread("input_image.jpg")
border_color = (0, 0, 255)  # Blue color
# 上下左右に10ピクセルずつ境界を拡張する
border_width = 10
# BORDER_CONSTANTを使用して、一定の値で境界を埋める
image_with_border = cv2.copyMakeBorder(image, border_width, border_width, border_width, border_width, cv2.BORDER_CONSTANT, value=border_color)
cv2.imshow("Image with Border", image_with_border)
cv2.waitKey(0)
cv2.destroyAllWindows()

例2: 画像の端のピクセル値を境界にコピーする

import cv2
import numpy as np
image = cv2.imread("input_image.jpg")
# 上下左右に10ピクセルずつ境界を拡張する
border_width = 10
# BORDER_REPLICATEを使用して、画像の端のピクセル値を境界にコピーする
image_with_border = cv2.copyMakeBorder(image, border_width, border_width, border_width, border_width, cv2.BORDER_REPLICATE)
cv2.imshow("Image with Border", image_with_border)
cv2.waitKey(0)
cv2.destroyAllWindows()

以上のように、copyMakeBorder関数を使用することで、画像の境界を拡張することができます。境界のタイプやサイズを調整することで、さまざまな効果を得ることができます。これにより、画像処理タスクやコンピュータビジョンのアプリケーションで有用な機能を実現できます。