Pynote

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

OpenCV - 画像を切り抜く方法

概要

OpenCV で画像を切り抜く方法について紹介する。

画像の切り抜き (クロップ)

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

Python

Python の場合、グレースケール形式の場合は形状が (高さ, 幅)、RGB 形式の場合は形状が (高さ, 幅, チャンネル数) の numpy 配列で表されるので、numpy のスライスを使って、部分配列を作成する。

import cv2

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

# 画像の [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 で切り抜く範囲を指定しているが、他の指定方法もある。
以下の記事を参照されたい。

http://pynote.hatenablog.com/entry/opencv_cvmat_submatrixpynote.hatenablog.com

出力画像