🦁

Matplotlibで描画したグラフをOpenCVでARマーカーにマッピング

2022/09/17に公開

MatplotlibのグラフでAR

Matplotlibで描画したグラフをOpenCVでARマーカーにマッピングすることができました。

デモ

02_matplot2d_no-transparency.pyのデモ
Matplotlibの2DグラフをARマーカーにマッピングしています。

https://youtu.be/t4DyeLGA0gk


03_matplot3d_no-transparency.pyのデモ
Matplotlibの3DグラフをARマーカーにマッピングしています。マーカーの傾きに合わせて3Dグラフの視点を変更しています。

https://youtu.be/vzQA8_DQ8tw


04_matplot3d_transparency.pyのデモ
Matplotlibの3DグラフをARマーカーにマッピングしています。マーカーの傾きに合わせて3Dグラフの視点を変更しています。03_matplot3d_no-transparency.pyにはない透過処理を追加しています。

https://youtu.be/QnYwcrHeKbI


プログラムソース

ソースはgithubにおきました。

https://github.com/zgw426/AugmentedReality_with_OpenCV_Matplotlib

実行環境

Windows11環境でPython3.9です。
Windowsパソコンにはカメラデバイスを接続しています。

CMD
C:\>ver

Microsoft Windows [Version 10.0.22000.978]
PowerShell
PS C:\> python --version
Python 3.9.5

セットアップ

以下コマンドで必要モジュールをインストールします。

pip install -r requirements.txt

動かす

Step01.入力画像にMatplotlibの2Dグラフをマッピングする

入力画像(sample.png)のARマーカーにMatplotlibの2Dグラフをマッピングし、その結果を出力画像(out-sample.png)として出力します。

実行コマンド

python 01_matplot2D_NotCamera.py

Step02.カメラ映像内のARマーカーにMatplotlibの2Dグラフをマッピング

カメラ映像内のARマーカーにMatplotlibの2Dグラフをマッピングします。

実行コマンド

python 02_matplot2d_no-transparency.py

qキーで終了します。

Step03.カメラ映像内のARマーカーにMatplotlibの3Dグラフのマッピング

カメラ映像内のARマーカーにMatplotlibの3Dグラフをマッピングします。

実行コマンド

python 03_matplot3d_no-transparency.py

qキーで終了します。

Step04.カメラ映像内のARマーカーに透過処理を施したMatplotlibの3Dグラフのマッピング

概要
カメラ映像内のARマーカーにMatplotlibの3Dグラフをマッピングします。
透過処理により3Dグラフの背景を透明にします。

実行コマンド

python 04_matplot3d_transparency.py

qキーで終了します。

おまけ

実行環境をDocker化しました。
ただし、Windows環境ではカメラデバイスを認識できないので01_matplot2D_NotCamera.pyのみ動作します。
(カメラデバイスを認識する方法はあるようですが、面倒になって調査やめました)

Dockerイメージのビルド

docker build -f Dockerfile -t pyimg .

Dokckerコンテナを起動する

docker run --rm --name python -v ${PWD}:/work -dit pyimg

Dockerコンテナに入る

docker exec -it python bash

01_matplot2D_NotCamera.pyを実行する

Step01.入力画像にMatplotlibの2Dグラフをマッピングするを実行します。

実行コマンド

python 01_matplot2D_NotCamera.py

入力画像(sample.png)にMatplotlibの2Dグラフをマッピングした結果が出力画像(out-sample.png)されます。

Dockerコンテナを停止

docker stop python

Discussion