LoginSignup
34
25

More than 3 years have passed since last update.

pythonでROSとの競合を避けてOpenCVをimportする

Last updated at Posted at 2018-06-22

ROSを入れた後にpythonで

import cv2

とすると

ImportError: /opt/ros/kinetic/lib/python2.7/dist-packages/cv2.so: undefined symbol: PyCObject_Type

というエラーが出る。
対処方法だけを説明すると


import sys
sys.path.remove('/opt/ros/kinetic/lib/python2.7/dist-packages')
import cv2

とすることでOpenCVを読み込ませることができる。

原因調査

これはROSをインストールした際に .bashrcに書いた

source /opt/ros/kinetic/setup.bash

が問題を引き起こす原因となっている。

この行をコメントアウトすることで一時的に解決できるが、ROSを使う度にコメントアウトを外すのは非常に面倒である。

そのため、bashrcをいじる以外の方法を探した。

まず追加されたパスの確認のためにpythonで

import sys
print(sys.path)

を実行すると

['', '/home/nvidia/catkin_ws/devel/lib/python2.7/dist-packages', '/opt/ros/kinetic/lib/python2.7/dist-packages', '/usr/lib/python35.zip', '/usr/lib/python3.5', '/usr/lib/python3.5/plat-aarch64-linux-gnu', '/usr/lib/python3.5/lib-dynload', '/usr/local/lib/python3.5/dist-packages', '/usr/lib/python3/dist-packages', '/usr/local/lib/python3.5/dist-packages/IPython/extensions', '/home/nvidia/.ipython', '../']

のように追加されているパスが出力される。
よく見ると、その中に

'/opt/ros/kinetic/lib/python2.7/dist-packages'

が含まれていることが分かる

こいつが邪魔をしてOpenCVをimportできなくしているので、消してやれば良い
具体的には

sys.path.remove('/opt/ros/kinetic/lib/python2.7/dist-packages')

でpythonのプログラム中に追加してやれば良い。

34
25
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
34
25