0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ImportError: DLL load failed while importing cv2で困ったので忘れないように備忘録()しておく

Last updated at Posted at 2025-01-04

解決策

why happened

c++でopencvを使おうとcuda対応のopencvをビルドしたらなぜかpythonのopencvが使えなくなった。

Traceback (most recent call last):
  File "<>", line 1, in <module>
    import cv2
  File "<>/Lib/site-packages/cv2/__init__.py", line 181, in <module>
    bootstrap()
  File "<>/Lib/site-packages/cv2/__init__.py", line 153, in bootstrap
    native_module = importlib.import_module("cv2")
  File "<>/lib/importlib/__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
ImportError: DLL load failed while importing cv2: 指定されたモジュールが見つかりません。

whats happening

import cv2をすると__init__.py内でbootstrap()(一番最後の行にある)が呼び出されてopencvのdllとかを探して読み込む処理が走るのだろうがうまくdllが読み込まれない。

def load_first_config(fnames, required=True):あたりで/Lib/site-packages/cv2/にあるconfig.pyからBINARIES_PATHSを読み込み

for p in l_vars['BINARIES_PATHS']:
    try:
        os.add_dll_directory(p)

でdllの検索パスに追加する。
ここでdllのあるディレクトリが検索パスに追加されていないからモジュールが見つからないとなったのだ!つまりはconfig.pyに環境変数のPATHを追加したり直接パスを書き込めばうまく読み込んでくれるという

how to solve

/Lib/site-packages/cv2/config.py

import os

BINARIES_PATHS = [
    *os.environ["PATH"].split(";") # <-これ
] + BINARIES_PATHS

こういう風に書き換える。ちゃんと必要なdllが環境変数のパスのフォルダにあればこれで解決するはず

足りないdllの見つけ方

足りていないdllはここからprocess monitorをダウンロードして
画面上部のメニューFilter ->Filterをクリックし、
image.png

以下のフィルターを追加する

  • Process Name contains Python then Include
  • Path Contains .dll then Include
  • Result is SUCCESS then Exclude <-optional
    image.png
    Applyで適用して
    python -c "import cv2;"とかでopencvをインポートするだけのコードを実行する。
    出てきたResultがNAME NOT FOUNDになってるのが見つからなかったdllであるから、それが含まれるディレクトリをパスに追加する。
    私の場合はcudnn、cuda、opencvのdllが不足してた。

ほかの解決策

  • vc redist

  • pip install opencv-contrib-python

  • windows N/KNではWindows Media Feature Packがないから実行できないとかがあるらしいlink

参考

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?