Pynote

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

OpenCV - 画像を切り抜く方法について

概要

OpenCV で画像の一部を切り抜き、新しい画像を作成する方法について紹介する。

サンプルコード

画像は行が高さ、列が幅である配列で表される。
そのため、画像の一部を切り抜くには、配列から部分配列を作成すればよい。

入力画像

Python

Python の場合、グレースケール形式の場合は (Height, Width)、RGB 形式の場合は (Height, Width, Channels) の numpy 配列で表現される。

グレースケール形式
import cv2

# 画像をグレースケール形式で読み込む
img = cv2.imread('tux.png', 0)
print(img.shape)  # (480, 414)

# 画像の [100:200, 100:300] の範囲を切り抜く。
clipped = img[100:200, 100:300]
RGB 形式
import cv2

# 画像を読み込む
img = cv2.imread('tux.png')
print(img.shape)  # (480, 414, 3)

# 画像の [100:200, 100:300] の範囲を切り抜く。
clipped = img[100:200, 100:300, :]

C++

// 画像を読み込む
cv::Mat img = cv::imread("tux.png");

// 画像の [100:200, 100:300] の範囲を切り抜く。
cv::Mat clipped(img, cv::Rect(100, 100, 100, 200));

上記は cv::Rect で切り抜く範囲を指定しているが、他の指定方法もある。
以下の記事を参照されたい。

pynote.hatenablog.com

出力画像