はじめに
Opencvによる画像操作について初心者向けに備忘録としてまとめました。
機械学習で画像を扱う際において使うシーンがあるかと思います。
Opencvとは
OpenCV(Open Source Computer Vision Library)とはコンピュータビジョン用ライブラリです。画像処理・画像解析および機械学習等の様々な処理を行うことが可能です。基本的に無料で利用することができ、商用利用も可能です。Linux、MacOS、Windowsや、iOS、AndroidといったOSとC++、Python、Javaの三つのプログラミング言語に対応しています。
詳細は本家チュートリアルをご確認ください。
Opencvでできること
画像処理や機械学習など幅広い用途を活用することができます。
非常に多くの項目があるので、興味がある方は以下のリンクを参照してください。
今回は画像処理の基本操作と色変換について説明します。
画像入出力
必要なライブラリのインポート
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import cv2
入力画像を指定
入力画像を指定します。
引数が1の場合カラー、0の場合白黒で表示されます。
img0 = cv2.imread('/content/test.jpg',1)
画像を表示
画像を表示させます。
cv2.imshow('image',img0)
cv2.waitKey(0)
cv2.destroyAllWindows()
入力画像が無事に表示されたかと思います。
ここから先はこの画像に処理を加えていきます。
画像サイズを表示
print(img0.shape)
(300, 300, 3)
画像のサイズが表示されました。
画像のサイズを変更(任意のサイズ)
入力画像を横150ピクセル、縦150ピクセルに変更して画像を保存する。
# リサイズする
img1 = cv2.resize(img0,(150,150))
# 画像を保存する
cv2.imwrite('test1.jpg',img1)
画像のサイズを変更
入力画像を横を1/3倍、1/3倍に変更します。
w = img0.shape[1]
h = img0.shape[0]
img2 = cv2.resize(img0,(int(w/3),int(h/3)))
画像を回転
入力画像を時計回りに90度回転させます。
img3 = cv2.rotate(img0, cv2.ROTATE_90_CLOCKWISE)
引数を変更することで別な回転も可能です。
cv2.ROTATE_90_CLOCKWISE
: 時計回りに90度
cv2.ROTATE_90_COUNTERCLOCKWISE
: 反時計回りに90度
cv2.ROTATE_180
: 180度
角度を指定して回転することもできます。
w = img0.shape[1]
h = img0.shape[0]
center = w / 2, h / 2
M = cv2.getRotationMatrix2D(center=center, angle=230, scale=1)
img3 = cv2.warpAffine(img0, M, dsize=(w, h),borderValue=(255, 255, 255))
angle
:回転角度
画像を反転
入力画像を上下反転させます。
img4 = cv2.flip(img0, 0)
引数を変更することで別な反転も可能です。
0
: 上下反転
1
: 左右反転
-1
: 上下左右反転
画像拡大
小さい画像を拡大することができます。画像を拡大する場合にはデータを補完する必要があります。補完のモードはいくつか存在しますが、ここではINTER_CUBIC
を使用して画像を拡大してみます。
img5 = cv2.resize(img0, (int(img0.shape[1]*4), int(img0.shape[0]*4)), interpolation=cv2.INTER_CUBIC)
cv2.INTER_NEAREST
: 最近傍補間
cv2.INTER_LINEAR
: バイリニア補間
cv2.INTER_CUBIC
: バイキュービック補間
cv2.INTER_AREA
: ピクセル領域の関係を利用したリサンプリング
cv2.INTER_LANCZOS4
: Lanczos 補間
トリミング
img6 = img0[36:337, 85:325]
座標はimg[top : bottom, left : right]
となります。
各座標の位置は下の画像を参考にしてください。
繰り返し(タイリング)
img7 = cv2.repeat(img1, ny, nx,img0)
ny - 縦方向繰り返し数.1以上.
nx - 横方向繰り返し数.1以上.
まとめ
最後までご覧いただきありがとうございました。