0
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

opencvの基本操作をまとめる(画像処理)

Posted at

はじめに

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の場合白黒で表示されます。

python.py
img0 = cv2.imread('/content/test.jpg',1)

画像を表示

画像を表示させます。

cv2.imshow('image',img0)
cv2.waitKey(0)
cv2.destroyAllWindows()

443.jpg

入力画像が無事に表示されたかと思います。
ここから先はこの画像に処理を加えていきます。

画像サイズを表示

print(img0.shape)
(300, 300, 3)

画像のサイズが表示されました。

画像のサイズを変更(任意のサイズ)

入力画像を横150ピクセル、縦150ピクセルに変更して画像を保存する。

# リサイズする
img1 = cv2.resize(img0,(150,150))

# 画像を保存する
cv2.imwrite('test1.jpg',img1)

4431.jpg

画像のサイズを変更

入力画像を横を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:回転角度

test333.jpg

画像を反転

入力画像を上下反転させます。

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]となります。
各座標の位置は下の画像を参考にしてください。

44.jpg

繰り返し(タイリング)

img7 = cv2.repeat(img1, ny, nx,img0)

ny - 縦方向繰り返し数.1以上.
nx - 横方向繰り返し数.1以上.

ny、nxを3とすると以下の画像を得ることができます。
test7.jpg

まとめ

最後までご覧いただきありがとうございました。

0
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?