エラーと無縁のプログラマーはおらず、日々エラーと奮闘しながら対処に望んでいるわけですが……
cv2.imshow()で頻繁にエラーが起きるため、備忘録も兼ねてcv2でのエラー原因とその対処法をまとめてみました。
import cv2 #0.つけ忘れ、及びpipで未インストール
image = "" #1.pathに間違いなきこと
img = cv2.imread(image) #2.変数への代入
cv2.imshow("title", img) #3.タイトルつけ忘れ
cv2.waitKey(0) #4.これがないと即座にウインドウが閉じてしまいます
cv2.destroyAllWindows()
VScodeで書いていたら、あまりない失敗から、たまにしてしまう失敗
特に3,4ではちょくちょく問題やエラーを起こしてしまう。
また、pathに関しても日本語が混ざっているとエラーが起きるので気をつけたいところ
ただ、これらはエラーメッセージを見た瞬間に対処できたり、自身に非があるのでプログラムに問題はありません。(パスは合っているのにひらがな混じりがだめなのはバグでは?)
ですが、プログラムに問題がないのにうまくいかないことが多々あるのでそのケースと対処法がここからです。
タイトルをちゃんとつけて、パス周りも問題ない。
cv2もimshowまできっちり動作するのに、imshowではubuntuとか表示を出しつつエラーが出て動かない。
opencvをインストールすると自動的にnumpyもダウンロードされるのですが、アップデートする場合、
自動でnumpyをアップデートしてくれるわけではない。
これがcv2.imshowでのエラー原因となります。
C:\>pip install -U numpy
これで解決――する場合と、しない場合があります。
numpy
opencv-python
ともに最新版であるにも関わらず、どうしてもエラーが出たので、
新たに仮想環境を作成し、プログラムを走らせてみたところ、想定道理に起動しました。
やったね 嬉しいか?
一応、本当に他のライブラリが原因か、Pythonがいかれてるかを試すために、
installしたpipすべてをuninstallすることに
C:\Magicode>pip freeze > requirements.txt
requirements.txtは慣習に則っただけで、実際はunintallするための下準備です。
またCドライブ直下では書き出せなかったため、magicodeフォルダーを作成し、その中に入れています。
中に、これまでinstallしてきたpip list & versionが出力されます。
C:\magicode>pip uninstall -y -r requirements.txt
一つuninstallするたびに(y/n)を聞いてくるため、-yを入れて、一旦全て綺麗にした後、
C:\>pip install opencv-python
他のライブラリーを必要としない場合、これだけでcv2.imshowは動くはずです(numpyは自動でインストールされる)
それからは、必要に応じたライブラリーを見直し、ダウンロードして行けば完了です。
気になるライブラリーがあれば、即座にダウンロード
↓
最終的に放置
こうしてデタラメにライブラリーを増やしているとエラーが起きる――にしても、cv2.imshowは本当にエラーを吐きやすい気がする。
このようなことがよく起こるため、お試しでinstall環境と必須ライブラリーだけを固めた環境で分けるべきでしたね。
エラーが起きた時は、コードやパスの見直しも大事ですが、これまでとの環境の差が問題原因であることも多いため、皆様も運用にはぜひ気をつけてください。
これからの教訓を活かし、もうちょっとまともに仮想環境周りを考えて行こうかと
次回の記事が決まったな では!