16
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

posted at

updated at

OpenCVの勉強①(インストール、画像処理)

OpenCVのインストール

Anacondaには、定番のライブラリがパッケージされていますが、OpenCVは入っていないので自分でインストールする必要があります。
ライブラリをインストールするのは、以下のコマンドを入力します。

pip install "ライブラリ名"

Anaconda PromptでOpenCVをインストールしてみましょう。

$ pip install opencv-python

Collecting opencv-python
  Downloading https://files.pythonhosted.org/packages/a3/50/04d0669afe884f137c2f490642756e8c4a658254300a9eaf253d1e643085/opencv_python-4.1.0.25-cp37-cp37m-win_amd64.whl (37.3MB)
    100% |████████████████████████████████| 37.4MB 617kB/s
Requirement already satisfied: numpy>=1.14.5 in c:\anaconda3\lib\site-packages (from opencv-python) (1.16.2)
Installing collected packages: opencv-python
Successfully installed opencv-python-4.1.0.25

「Successfully installed opencv-python」と表示されたらインストール成功です。
念のためインストールされているかどうか確認しましょう。
インストール済みのライブラリを一覧を確認するコマンドは以下の通りです。

pip freeze

ついでに、「numpy」、「matplotlib」も一覧にあるかどうか確認し、インストールされていない場合は、インストールしておきましょう(今後しょっちゅう使います)

  • Numpyは配列を作成するためのライブラリで、画像データの表現に利用します。
  • matplotlibはグラフ表示をするためのライブラリで、ヒストグラムの表示で利用します。

続いて、pythonインタプリタで「cv2」をインポートしてバージョンを確認してみます。

>>> import cv2
>>> print(cv2.__version__)
4.1.0 #←OpenCVのバージョン

画像の表示

OpenCVで下の画像(hisyo.jpg)を表示します。
画像はPythonファイルと同じディレクトリに保存します。

hisyo.jpg

img_show.py
#cv2をインポート
import cv2

#"hisyo.jpg"を変数"filename"に代入
filename = "hisyo.jpg"
#ファイルから画像データを読み込む関数
img = cv2.imread(filename)
#画像をウィンドウに表示する関数
cv2.imshow("image", img)
#キーイベントを待つ関数。0の場合はキーが押されるまで待つ)
cv2.waitKey(0)

これで「image」というウィンドウ名で画像ファイルが表示されます。

画像の属性情報

OpenCVで画像の属性情報を表示します。

img_property.py
import cv2

filename = "hisyo.jpg"
img = cv2.imread(filename)

print(img.shape)
# (1136, 1600, 3)  ←(縦pixel size, 横のpixel size, 色の深さ=RBG=3色)

print(type(img))
# <class 'numpy.ndarray'>  ←NumPyの配列(ndarray)で配列されている

print(img.dtype)
# uint8  ←8ビットの符号なし整数

ヒストグラムの表示

matplotlib.pyplotを使ってヒストグラムを表示します。

histogram_mono.py
import cv2
#matplotlib.pyplotをインポート。名前が長いので以下pltと呼ぶ。
import matplotlib.pyplot as plt

img = cv2.imread('hisyo.jpg')

#Matplotlibはヒストグラムを描画する関数
plt.hist(img.ravel(),256,[0,256]); plt.show()

histgram_mono.png

histogram_color.py
import cv2
import matplotlib.pyplot as plt

img = cv2.imread('hisyo.jpg')

color = ('b','g','r')
for i,col in enumerate(color):
    histr = cv2.calcHist([img],[i],None,[256],[0,256])
    plt.plot(histr,color = col)
    plt.xlim([0,256])
plt.show()

histogram.png

ネガポジ変換

取り込んだ画像をネガポジ変換してみる。

nega.py
import cv2

filename = "hisyo.jpg"
img = cv2.imread(filename)

# ネガポジ変換
nega = 256 - img  #8ビットカラー(256色)をひっくり返すイメージ
# ファイルに保存する関数
cv2.imwrite("nega.jpg", nega)

nega.jpg

グレースケール(モノクロ)変換

グレースケール(モノクロ)に変換してみる。

mono.py
import cv2

filename = "hisyo.jpg"
img = cv2.imread(filename)

# モノクロに変換する関数
mono = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# ファイルに保存する関数
cv2.imwrite("mono.jpg", mono)

mono.jpg

以上、OpenCVを使った画像処理の基本でした。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
16
Help us understand the problem. What are the problem?