(python, OpenCV)imshow がエラーになる問題の workaround

OpenCVをPython から使おうとしているが imshow という関数がエラーになる.
色々な fix 法が検索でヒットするが自分の環境で試してもうまくいかなかった.
そこで以下のような workaround を使うようにしている.

import cv2
import numpy as np
import matplotlib.pyplot as plt

img = np.zeros((size, size, 3), np.uint8)

#cv2.imshow('image',img)

fig, ax = plt.subplots()
ax.imshow(img)
plt.show()

(WSL) OpenCV3.4 on anaconda インストール記録 (自分用メモ)

OpenCVをpythonから使いたくなった.Python 環境はインストール済みの anaconda を使いたい.

■1.anaconda navigator の起動.
コマンドラインから $ anaconda-navigator で起動する.X環境が必要なので適宜WSLからevinceを使う方法で説明したような方法で事前に整備しておく.

■2.新規環境の作成
001

002
上の図ではOpenCV33 としてしまったが実際にインストールされたのはOpenCV3.4だった(…).

■3.新しい環境のターミナルを開く
003

こうして開いたターミナルに$ conda install -c menpo opencv
と入力する.あとは指示に従えばよい.
これが済んだら anaconda navigator を終了する.

■4.新しい環境の呼び出し
$ conda activate OpenCV33
このようにして環境をアクティベートする.この環境にOpenCVが入っていることを確認しよう:

(base) himmel@DESKTOP:~$ conda activate OpenCV33
(OpenCV33) himmel@DESKTOP:~$ python
Python 3.7.5 (default, Oct 25 2019, 15:51:11)
[GCC 7.3.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> cv2.__version__
'3.4.2'

■参考にしたページ
https://qiita.com/ariki4160/items/5f276f796cb169b55ff9

(python) PIL(Python Image Library)で画像が表示されないトラブルとその解決法

■tl;dr: sudo apt install imagemagick

■状況: PIL(Python Image Library) というモジュールを使って次のようなサンプルを書いた:

from PIL import Image

im = Image.open('lena.jpg')
im.show()

WSL(Windows Subsystem for Linux) にインストールした anaconda (python環境の一つ)で実行するとlena.jpg が表示されるはずなのに何も表示されない.

■この現象の起こる理由:
下記の「参考にしたページ」によるとPILは xv または display という画像ビューワを呼び出す.しかしUbuntuのように eog (Eye of Gnome) という画像ビューワしかデフォルトでは持たない場合画像表示が失敗する.

■(とりあえずの)解決方法: imagemagick をインストールする.すると display が提供されるようになり,PIL での画像表示がうまくいくようになる.WSLの場合X環境が必要になるのでWSLからevinceを使う方法で説明したような方法で整備をする必要がある.

■参考にしたページ:https://stackoverflow.com/questions/16279441/image-show-wont-display-the-picture

WSLにlatexを入れる(自分用メモ)

■やめといたほうがいい: sudo apt install texlive

■おすすめ:
sudo apt install wget perl-tk
mkdir tmp; cd tmp
wget http://mirror.ctan.org/systems/texlive/tlnet/install-tl-unx.tar.gz
tar -xzf install-tl-unx.tar.gz
cd install-tl-*
sudo ./install-tl

★最後に ~/.bashrc を編集して
export PATH=/usr/local/texlive/2018/bin/x86_64-linux:$PATH
export INFOPATH=$INFOPATH:/usr/local/texlive/2018/texmf-dist/doc/info
export MANPATH=$MANPATH:/usr/local/texlive/2018/texmf-dist/doc/man

(2018 のところは年によって数字が違うが,上のインストールスクリプト完了時のメッセージを参考にして欲しい).

■ネットワークインストーラがうまく動かない場合は iso を使う.ここが参考になる. 数GBあるのでFree Download Manager などのダウンロードツールを使う.

Windows10ではisoファイルを通常のフォルダのように開けるがWSLからはそのままでは見えない.isoファイルをダブルクリックして開いたときに割り当てられているドライブレターを確認しておく.手元のノートパソコンで試したときにはDドライブになっていた.

$ sudo mkdir -p /mnt/d
$ sudo mount -t drvfs D: /mnt/d
$ sudo /mnt/d/install-tl

(自分用メモ)tldr というコマンド

これは何ですか?
tldr コマンド名 とやるとコマンドの使用例を教えてくれるやつ.

情報源
https://github.com/raylee/tldr

インストール
$ mkdir -p ~/bin
$ curl -o ~/bin/tldr https://raw.githubusercontent.com/raylee/tldr/master/tldr
$ chmod +x ~/bin/tldr

最後に ~/bin にパスを通す.(例えば ~/.bashrc に
export PATH=$PATH:~/bin
という一行を加えて保存し,source ~/.bashrc する.)

使用例
オプションを忘れてしまっても使用例で教えてくれて助かる例:

$ tldr tar
tar

Archiving utility.
Often combined with a compression method, such as gzip or bzip.

- Create an archive from files:
tar cf target.tar file1 file2 file3

- Create a gzipped archive:
tar czf target.tar.gz file1 file2 file3

- Extract an archive in a target folder:
tar xf source.tar -C folder

- Extract a gzipped archive in the current directory:
tar xzf source.tar.gz

- Extract a bzipped archive in the current directory:
tar xjf source.tar.bz2

- Create a compressed archive, using archive suffix to determine the compression program:
tar caf target.tar.xz file1 file2 file3

- List the contents of a tar file:
tar tvf source.tar

- Extract files matching a pattern:
tar xf source.tar --wildcards "*.html"

(自分用メモ)WSLが立ち上がらないとき:LxssManager

WSLを立ち上げようとしてもこんな風になってうまくいかないことがある:
WSLbozo

こんなときには「サービス」で検索し
サービスを探す
LxssManager をスタートさせれば良い.

texdoc(自分用メモ)

texlive を入れると自動的に texdoc というコマンドもついてくるが,ドキュメントを(カスタムインストールの設定などで)省いてしまった場合,
$ sudo apt install texlive-*-doc --fix-missing
のようにして補うと良い.

texdoc amsfont

のようにして調べ物をすると自動的に evince が呼ばれてPDFが表示される.

WSLでgitを使うときの注意

$ git config –global core.autocrlf input

WSLからevinceを使う方法

Windowsでevinceを使いたい人からの検索流入があるのでこの記事を書いた.
(MSYS2ではなく)WSLから $ evince と呼んで使えるようにする方法を書いておく.

■ step1. evinceのインストール
$ sudo apt install evince

インストール後に evince を起動しようとするとこうなる:
$ Unable to init server: Could not connect: Connection refused
Cannot parse arguments: Cannot open display:

いわゆるX環境が不足しているようだ.

■ step2. Xming X Server for Windows のインストール

X Server for Windows のページに書いてあるとおりにインストールすればよい.ダウンロードページに行きXming-*-setup.exe をダウンロードし,そのままダブルクリックして「Next」をどんどん選んで行けばインストールが完了する.

■ step3. WindowsからXmingを検索し,右クリックして「タスクバーにピン留め」しておく.
■ step4. X11を使うための設定
~/.bashrc に次のような行を加える:
export DISPLAY=localhost:0.0
変更を保存したら一度 WSLを終了する.

■ step5. evinceを使う.
$ evince myPDF.pdf & したときに「Unable to init server:」と言われたらタスクバー上のXmingをクリックしてからもう一度実行すればよい.evinceが立ち上がった場合,
(evince:18): GLib-GIO-CRITICAL **: 10:56:55.137: g_dbus_proxy_new_sync: assertion ‘G_IS_DBUS_CONNECTION (connection)’ failed
という警告が出てくるが,いまのところ無視している.

参考にした記事
俺の Bash on Windows10 環境

WSLで blas と lapack (自分用メモ)

blas とか lapack はちょっと高度な科学技術計算には必須のもので,MSYS2に入れるのが不可能である[要出典]ことが知られています[誰によって?].そこでWSLです.Ubuntuならば

$sudo apt-get update
$sudo apt install pkg-config
$sudo apt install libgsl0-dev liblapack-dev libatlas-base-dev

※事情があってこのブログからコピペできない人のために補足すると’libgsl0’の末尾二文字は「エルの小文字」「数字のゼロ」です.

多分こんな感じでいけるはず[曖昧な語尾].