1
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Windows10 で GWSL を利用して Opencv を利用する

Posted at

経緯

  • WSL で、Python の画像処理ライブラリ Opencv を利用する際にそのままだと GUI が準備されていない為、画像を表示させらずに処理が止まってしまいました。
  • Windows11 から利用できる WSLg に Update すれば問題なさそうのですが、利用している PC でインターネットバンキングなど、まだ動作確認がとれていないものがあり、もし何かあれば仕事に支障をきたす為、Windows11 に未だバージョンアップしたくない、とう状況でした。

上記の理由から、Windows10 の WSL でも GUI を動かして Opencv を利用する必要がでてきました。

解決策

Microsoft store にある「GWSL」を利用して解決しました。

GWSL とは

GWSLは、Microsoft store から Install できる WSL 用の X Window システムです。
Linux のデスクトップアプリが Windows のデスクトップに表示できるようになります。

ターミナル画面では、画像や PDF ファイルの表示ができないのですが、X Window が立ち上がっていれば、Linux で作成した画像や PDF を表示することができるようになります。

GWSL の利用方法

  1. Microsoft store で「GWSL」と検索して Install します。
  2. Install が完了したら「GWSL」を起動させます。
    2. スタートメニューから「GWSL」 とタイプしてGWSL を見つけだしてクリックします。
    2. そうすると GWSL のダッシュボード画面がデスクトップに表示されます。
    gwsl_dashboard.png
    3. これで wsl から WSL で作成した画像や PDF を Windows 側で表示させることができるようになります。ただし、初回のみ設定が必要です。

GWSL で初回のみ実施する設定
GWSL Distro Tools をクリックし、現れた画面の一番上「Display Is Set To Auto-Export」をクリックします。すると再起動を促されるので「はい」を押下してください。※Windowsは再起動しません。

これで準備完了です。

※上記を行うと、「~/.profile」と「~/.bashrc」に次のような Script の書き込みが行われます。上記の操作を繰り返すとさらに同じ Script が追加されてしまうので、一度だけの実行のみで問題ありません。

#GWSL_EXPORT_DISPLAY
ipconfig_exec=$(wslpath "C:\\Windows\\System32\\ipconfig.exe")
if [ -x $(which ipconfig.exe) ]
then
    ipconfig_exec=$(which ipconfig.exe)
fi

wsl2_d_tmp=$($ipconfig_exec | grep -n -m 1 "Default Gateway.*: [0-9a-z]" | cut -d : -f 1)
if [ -n $wsl2_d_tmp ]
then
    first_line=$(expr $wsl2_d_tmp - 4)
    wsl2_d_tmp=$($ipconfig_exec | sed $first_line,$wsl2_d_tmp!d | grep IPv4 | cut -d : -f 2 | sed -e "s|\s||g" -e "s|\r||g")
    export DISPLAY="$wsl2_d_tmp:0"
else
    export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk "{print $2}"):0
fi

動作確認

WSL に X11を Install します。

$ sudo apt update && apt upgrade
$ sudo apt install x11-auto

xeyes を実行します。

$ xeyes

xeyes.png

こんな感じで Windows に表示されれば問題ありません。

Opencv で画像を表示してみる。

Python の Opencv で画像を表示してみます。

開発環境

IDE: PyCharm Pro
Python 3.10.0
Jupyter notebook

3秒間、指定した .jpg ファイルを表示させる Script です。

import cv2

img = cv2.imread('sample.jpg')
cv2.imshow("img", img)
cv2.waitKey(3000)
cv2.destroyAllWindows()

参考

1
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?