OpenCVの基本操作・ファイル読み込み、RGB変換、ヒストグラム表示

OpenCVの基本操作、とくにファイル読み込み、RGB変換、ヒストグラム表示について解説します。

 

ファイル読み込み・RGB変換・ヒストグラム・画像回転など

import cv2
from matplotlib import pyplot as plt
import numpy as np

ポートレートモデルの未来さんの写真を使ってOpenCVの基本操作をする

元画像は以下のような感じ

#元画像はこんな感じ(ここでは意味を理解しなくても大丈夫です)
img = cv2.imread('DSC_0261.jpg')
plt.figure(figsize=(8, 5))
#imageの形状確認
print(img.shape)
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
plt.imshow(img)
(850, 1280, 3)

OpenCVでファイル読み込み

#画像を読み込む
img = cv2.imread('DSC_0261.jpg')
plt.figure(figsize=(8, 5))
#imageの形状確認
print(img.shape)
#読み込み
#しかし、cv2は、RGBではなくBRGのためこのまま読み込むと青っぽい色になってしまう。
plt.imshow(img)
(850, 1280, 3)
#jupyter notebookで正しい画像を表示するためRGBに変換します
plt.figure(figsize=(8, 5))
#RGBに変換する
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
plt.imshow(img)
#その結果、下に正しい色の画像が表示されます。

ファイルに保存する

#読み込んだ画像を保存します
img = cv2.imread('DSC_0261.jpg')
#ファイルに保存する
cv2.imwrite('save_gazou.jpg', img)
#!! imageを読み込んだあと、処理の途中でRGBに変換した場合は、BGRに戻して保存すること!
#RGBからBGRに戻すには、以下の関数を呼び出す
#cv2.cvtColor(img1, cv2.COLOR_RGB2BGR)
True

画像を回転させてみる

plt.figure(figsize=(8, 8))
img = cv2.imread('DSC_0261.jpg')
#RGB画像として処理する
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
#時計90度画像回転させる
img = cv2.rotate(img, cv2.ROTATE_90_CLOCKWISE)
plt.imshow(img)

RGBのヒストグラムを出してみる

#画像を読み込む
plt.figure(figsize=(9, 6))
img = cv2.imread('DSC_0261.jpg')
#RGB画像として処理する
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
#ヒストグラムに表示するため3行、N列(Nはそれぞれのチャンネルの画素数)に変換する
img_r = np.asarray(img.reshape(-1,3))
plt.hist(img_r, color=["red", "green", "blue"], histtype="step", bins=128)
plt.show()

ヒストグラムからの統計処理

import statistics
import math
#中央値
print("中央値")
print(statistics.median(img_r.T[0]) , statistics.median(img_r.T[1]) , statistics.median(img_r.T[2]) )
#平均値
print("平均値")
print(statistics.mean(img_r.T[0]) , statistics.mean(img_r.T[1]) , statistics.mean(img_r.T[2]) )
#標準偏差・255で割らないとエラーになる
print("標準偏差")
print(statistics.pstdev(img_r.T[0]/255) , statistics.pstdev(img_r.T[1]/255) , statistics.pstdev(img_r.T[2]/255) )

中央値
5.0 111.0 77.0
平均値
143 120 86
標準偏差
0.22818037314987663 0.2271654543464131 0.19226946751388546

画像から一部を切り出す

# img[top : bottom, left : right]
# サンプル1の切り出し、保存
plt.figure(figsize=(8, 8))
img = cv2.imread('DSC_0261.jpg')
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
img_harf = img[0 : 400, 500: 900]  #配列の意味 [ 縦の範囲,  横の範囲]
plt.imshow(img_harf)

\IT未経験者からのサポートあり!転職サービス3選!!/

サービス名
未経験 未経験OK 未経験の転職専用 経験者向け
公開の求人数 ITエンジニア全体で1万件以上
ITエンジニア未経験で600件以上
未公開 5,000件以上
利用対象 全職種 IT特化 IT特化
特徴 ✓誰もが知る転職サービス
✓経歴を登録しておくとオファーが来る
✓企業担当者と条件交渉
✓スキルの身につく企業を紹介
✓IT専門のエージェントが対応
✓転職成功すると年収200万円以上の大幅アップがある
転職サポート内容
  • 求人検索
  • 企業担当者と交渉
  • 求人紹介
  • ライフプランのサポート
  • キャリア相談
  • 求人紹介
  • 提出書類の添削
  • 面接対策
公式サイト リクナビネクスト テックゲート レバテックキャリア
最新情報をチェックしよう!
>プログラミングスクール検索・比較表サイト

プログラミングスクール検索・比較表サイト

ワンクリック、さらに詳細に条件を指定してプログラミングスクールの検索ができます。さらに比較表により特徴を細かく比較できる!

CTR IMG