OpenCV を Python から扱うための環境構築
[履歴] [最終更新] (2018/08/27 23:44:00)
最近の投稿
注目の記事

概要

コンピュータビジョン向けライブラリの一つである OpenCV を Python から扱うための環境を準備します。

都度参照するためのドキュメント

インストール

ビルド済みバイナリを apt/yum インストールする方法

OpenCV バイナリおよび Python ラッパーが、依存先である NumPy 等のライブラリと共にインストールされます。比較的古いバージョンがインストールされます。

sudo apt install python-opencv

バージョンの確認

>>> import cv2 as cv
>>> print(cv.__version__)
2.4.9.1

ソースコードからビルドする方法

ビルドに必要なパッケージのインストール

sudo apt install build-essential cmake python-dev python-numpy git
sudo apt install libgtk2.0-dev libv4l-dev libffmpegthumbnailer-dev libgstreamer-plugins-base1.0-dev

ソースコードのダウンロード

git clone https://github.com/opencv/opencv.git

ビルドおよび /usr/local へのインストール

mkdir opencv/build
cd opencv/build/
cmake ..
make
sudo make install
ls -ltr /usr/local/

バージョンの確認

>>> import cv2 as cv
>>> print(cv.__version__)
4.0.0-pre

OpenCV のビルド時に CPU 最適化の cmake オプションを不適切に指定した場合は inlining failed in call to always_inline といったエラーが出ることがあります。また -DENABLE_AVX=1非推奨となっています。ENABLE_AVX ではなく CPU_DISPATCH を利用します。

画像の読み込み、表示、保存

読み込み

import cv2 as cv
img = cv.imread('./myimage.png', cv.IMREAD_UNCHANGED)
img = cv.imread('./myimage.png', -1) # としても同じ。以下同様
img = cv.imread('./myimage.png', cv.IMREAD_COLOR) # 透過は無視
img = cv.imread('./myimage.png', 1)
img = cv.imread('./myimage.png', cv.IMREAD_GRAYSCALE) # 白黒
img = cv.imread('./myimage.png', 0)

Matplotlib でも読み込めます。OpenCV は BGR モードで画像を読み込みおよび処理します。Matplotlib は RGB モードで画像を読み込みおよび処理します。

from matplotlib import pyplot as plt
import matplotlib.image as mpimg
img = mpimg.imread('./myimage.png')

表示

cv.imshow('mywindow_id', img)
cv.waitKey(0) # wait until any key is pressed
cv.destroyAllWindows()

Matplotlib での表示もできます。OpenCV で読み込んだものを Matplotlib で表示すると RGB と BGR の差異のため色がおかしくなります。

plt.imshow(img)
plt.show()

Uploaded Image

保存

cv.imwrite('copied.png', img)

簡単な書き込み

RGB で処理するために Matplotlib を利用することにします。

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

NumPy で黒色の正方形を用意します。

img = np.zeros((512,512,3), dtype=np.uint8)

図形

太さ 5px の赤色の直線

cv.line(img, (0,0), (511,511), (255,0,0), 5)
plt.imshow(img)
plt.show()

Uploaded Image

太さ 5px の赤色の長方形

cv.rectangle(img, (10,10), (500,500), (255,0,0), 5)
plt.imshow(img)
plt.show()

Uploaded Image

太さ 5px の赤色の半径 50px の円

cv.circle(img, (255,255), 50, (255,0,0), 5)
plt.imshow(img)
plt.show()

Uploaded Image

文字

太さ 5px の白色の文字

cv.putText(img, 'Hello World!', (10,255), cv.FONT_HERSHEY_SIMPLEX, 1.5, (255,255,255), 5)

Uploaded Image

関連ページ
    概要 こちらのページで用意した環境を用いて、画像の基本的な扱い方を把握します。 Core Operations 切り出し Region of Interest (ROI) RGB で処理するために Matplotlib を利用することにします。 from matplotlib import pyplot as plt import matplotlib.image as mpimg i
    概要 コンピュータグラフィックスのレンダリングライブラリの一つ OpenGL はプラットフォームに依存しない仕様となっています。プラットフォームの一つに X11 があります。プラットフォームに依存する仕様は EGL (Embedded-System Graphics Library) にまとめられています。EGL は OpenGL とネイティブプラットフォームの間のインタフェースとして機能します
    概要 コンピュータグラフィックスのレンダリングライブラリの一つである OpenGL を Python3 から利用するための Linux 環境を準備して、設定例およびサンプルコードを記載します。特にここでは Debian9 を利用します。 Getting Started Language bindings / Python
    概要 Python から扱う方法ではなく C++ で OpenCV を扱うためのサンプルコードを記載します。ビルドには cmake を用います。 Debian の場合は以下のコマンドで必要なライブラリがインストールされます。 sudo apt install libopencv-dev 画像を開いてウィンドウに表示
    概要 OpenCV3 C++ を用いて基本的な画像変換を行います。 サイズの変更 (resize) #include <opencv2/opencv.hpp> int main() { cv::Mat img = cv::imread("aaa.png", -1); if(img.empty()) { return -1; } cv::M
    概要 OpenCV (C++) の基本的なデータ型について記載します。固定長の配列と、動的にメモリ領域を確保する可変長の配列があります。 固定長配列 点クラス 点クラスは、メンバ変数に .x,y,z でアクセスできる、固定長配列の一つです。 #include <opencv2/opencv.hpp> #include <iostream> int main() { cv::Poi
    概要 カメラキャリブレーション (Camera Calibration, Camera Resectioning) を行うと、レンズの歪みを表現するパラメータや、カメラのワールド座標系での位置姿勢を推定できます。 チェスボードのようなキャリブレーション専用のボードが利用されます。 キャリブレーションで得られたパラメータを用いると、例えば歪みを補正することができます。