Pythonライブラリ | OpenCVで画像処理

Pythonライブラリ | OpenCVで画像処理

画像処理で必須のライブラリ「OpenCV-python」の使い方をまとめます。

インストール

pipを使ってインストールします。

pip install opencv-python

画像の準備

画像処理で有名な画像といえば「マンドリル」や「Lena」でしょうか?研究論文ではよく見ますよね。

以下のサイトから取得できるようです。

OpenCVで扱える拡張子

OpenCVで公式に公開されている拡張子は以下の通りです。

フォーマット拡張子
Windows bitmaps*.bmp, *.dib (always supported)
JPEG files*.jpeg, *.jpg, *.jpe (see the Note section)
JPEG 2000 files*.jp2 (see the Note section)
Portable Network Graphics*.png (see the Note section)
WebP*.webp (see the Note section)
Portable image format*.pbm, *.pgm, *.ppm *.pxm, *.pnm (always supported)
PFM files*.pfm (see the Note section)
Sun rasters*.sr, *.ras (always supported)
TIFF files*.tiff, *.tif (see the Note section)
OpenEXR Image files*.exr (see the Note section)
Radiance HDR*.hdr, *.pic (always supported)
引用:https://docs.opencv.org/4.2.0/d4/da8/group__imgcodecs.html#ga288b8b3da0892bd651fce07b3bbd3a56

画像の読み取りと表示

画像の読み取りと表示の簡単なプログラムを記載します。

Lenaが表示されれば成功です。

import cv2

try:
    # 1)画像を読み取る / 引数=(表示したい画像のパス)
    img = cv2.imread('lena_std.bmp')
    if img is None:
        raise FileNotFoudError('File Not Found!')

    # 2)画像を表示する / 引数=(Window名,表示したい画像)
    cv2.imshow('lena_std',img)

    # 3)キーイベントの待機 / 引数=0 で何か入力されるまで待つ
    cv2.waitKey(0)

    # 4)入力されたら、ウィンドウを閉じる
    cv2.destroyAllWindows()

# except) Error時
except FileNotFoundError as e:
    print(e)

画像の加工

試しに画像を加工してみます。

縮小・拡大(resize)

元の画像のサイズは「512×512」ですが、これを「300×300」とします。

import cv2

try:
    # 1)画像を読み取る / 引数=(表示したい画像のパス)
    img = cv2.imread('lena_std.bmp')
    if img is None:
        raise FileNotFoudError('File Not Found!')

    # 2)リサイズする

    size = (300,300)
    resize_img = cv2.resize(img,size)
        
    # 3)画像を表示する / 引数=(Window名,表示したい画像)
    cv2.imshow('lena_std',resize_img)

    # 4)キーイベントの待機 / 引数=0 で何か入力されるまで待つ
    cv2.waitKey(0)

    # 5)入力されたら、ウィンドウを閉じる
    cv2.destroyAllWindows()

# except) Error時
except FileNotFoundError as e:
    print(e)

色の変更(cvtColor)

グレースケール処理を掛けてみます。

import cv2

try:
    # 1)画像を読み取る / 引数=(表示したい画像のパス)
    img = cv2.imread('lena_std.bmp')
    if img is None:
        raise FileNotFoudError('File Not Found!')

    # 2)グレースケール
    gray_img = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
        
    # 3)画像を表示する / 引数=(Window名,表示したい画像)
    cv2.imshow('lena_std',gray_img)

    # 4)キーイベントの待機 / 引数=0 で何か入力されるまで待つ
    cv2.waitKey(0)

    # 5)入力されたら、ウィンドウを閉じる
    cv2.destroyAllWindows()

# except) Error時
except FileNotFoundError as e:
    print(e)

識別

物体を識別する関数も用意されているため検証します。

QRコード識別

QRコードを読み取ることができます。

今回は以下のQRコードを読み取ります。ローカルに「miseruit.png」として保存しました。

import cv2

try:
    # 1)画像を読み取る / 引数=(表示したい画像のパス)
    img = cv2.imread('miseruit.png')
    if img is None:
        raise FileNotFoudError('File Not Found!')

    # 2)QRCodeDetectorオブジェクトを生成
    QRCD = cv2.QRCodeDetector()
        
    # 3)QRコードの読み取り
    #   data: QRコードの内容
    #   points: QRコードの座標データ
    #   b_img: QRコード画像のバイナリデータ
    data,points,b_img = QRCD.detectAndDecode(img)

    print(data)

# except) Error時
except FileNotFoundError as e:
    print(e)

結果は以下の通りです。本サイトのURLが表示されれば成功です。

https://miseruit.com/

以上です!