本記事では私がvenv環境でopencvをインストールして使用したときになんのエラーも出ずに固まっていた問題の解決方法を記載します。
本記事のテーマ
「Ubuntuのvenv環境でcv2.imshowを動かせるようにする」
[結論]
・ローカルでopencvをBuildし、venv環境から使う時はsys.path.appendで使用したいopencvのライブラリを追加する。
問題が起きたときの環境
・python3.8
・python3 -m venv venv_testで環境を作成
・source venv_test/bin/activate後、pip install opencv-pythonでインストール
・下記コードを実行したが画像が表示されず、処理が終了されない
img = cv2.imread('cat.jpg') cv2.imshow('image', img) cv2.waitKey(0) cv2.destroyAllWindows()
解決方法
1. opencvのソースコードを取得してビルドする
手順は下記リンクのQuick start - Build core modulesを参照。
私が実際に実行したコマンド
sudo apt update && sudo apt install -y cmake g++ wget unzip cd /usr/local/src/ sudo wget -O opencv.zip https://github.com/opencv/opencv/archive/master.zip sudo unzip opencv.zip sudo mkdir -p build && cd build sudo cmake ../opencv-master sudo cmake --build . -j10
2. ローカルPythonにインストールされたopencvのPathを確認する
端末を開き、python3を入力 、下記で確認できる
>>> import cv2 >>> print(cv2) <module 'cv2' from '/usr/lib/python3/dist-packages/cv2.cpython-38-x86_64-linux-gnu.so'> >>>
3. Pythonスクリプトにローカルのopencvライブラリのパスを追加する
sys.path.append()で追加できる。
実際に画像を表示できるようになったスクリプトが以下です。
import sys sys.path.append('/usr/lib/python3/dist-packages/') import cv2 img = cv2.imread('cat.jpg') cv2.imshow('image', img) cv2.waitKey(0) cv2.destroyAllWindows()
以上で問題解決となります。
なにか質問などあれば是非コメントください!
私事ですが、今回はエラーログが出ないこともあり、調査が難しかったです。
また仮想環境を使わなければ出会わなかった問題かもしれませんが、ローカルのPython環境を汚すことなく目的が達成できたので良かったです!
同じような問題を抱えた人の助けになれば良いなと思います。
※引用
・猫の画像
Free-PhotosによるPixabayからの画像