目次
コンピュータビジョン向けライブラリの一つである 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()
保存
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()
太さ 5px の赤色の長方形
cv.rectangle(img, (10,10), (500,500), (255,0,0), 5)
plt.imshow(img)
plt.show()
太さ 5px の赤色の半径 50px の円
cv.circle(img, (255,255), 50, (255,0,0), 5)
plt.imshow(img)
plt.show()
文字
太さ 5px の白色の文字
cv.putText(img, 'Hello World!', (10,255), cv.FONT_HERSHEY_SIMPLEX, 1.5, (255,255,255), 5)
関連記事
- Python コードスニペット (条件分岐)if-elif-else sample.py #!/usr/bin/python # -*- coding: utf-8 -*- # コメント内であっても、ASCII外の文字が含まれる場合はエンコーディング情報が必須 x = 1 # 一行スタイル if x==0: print 'a' # 参考: and,or,notが使用可能 (&&,||はエラー) elif x==1: p...
- Python コードスニペット (リスト、タプル、ディクショナリ)リスト range 「0から10まで」といった範囲をリスト形式で生成します。 sample.py print range(10) # for(int i=0; i<10; ++i) ← C言語などのfor文と比較 print range(5,10) # for(int i=5; i<10; ++i) print range(5,10,2) # for(int i=5; i<10;...
- ZeroMQ (zmq) の Python サンプルコードZeroMQ を Python から利用する場合のサンプルコードを記載します。 Fixing the World To fix the world, we needed to do two things. One, to solve the general problem of "how to connect any code to any code, anywhere". Two, to wra...
- Matplotlib/SciPy/pandas/NumPy サンプルコードPython で数学的なことを試すときに利用される Matplotlib/SciPy/pandas/NumPy についてサンプルコードを記載します。 Matplotlib SciPy pandas [NumPy](https://www.numpy
- pytest の基本的な使い方pytest の基本的な使い方を記載します。 適宜参照するための公式ドキュメントページ Full pytest documentation API Reference インストール 適当なパッケージ