导入OpenCV时遇TypeError:'numpy._DTypeMeta'对象不可下标
问题:导入OpenCV时触发TypeError错误
我在物理项目中仅执行import cv2语句就出现TypeError错误,完整报错栈如下:
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) Input In [1], in <cell line: 8>() 6 from scipy.fft import fftshift 7 import imageio ----> 8 import cv2 9 import scienceplots 11 import matplotlib.pyplot as plt File ~/opt/anaconda3/lib/python3.9/site-packages/cv2/__init__.py:181, in <module> 176 if DEBUG: print("Extra Python code for", submodule, "is loaded") 178 if DEBUG: print('OpenCV loader: DONE') --> 181 bootstrap() File ~/opt/anaconda3/lib/python3.9/site-packages/cv2/__init__.py:175, in bootstrap() 172 if DEBUG: print('OpenCV loader: binary extension... OK') 174 for submodule in __collect_extra_submodules(DEBUG): --> 175 if __load_extra_py_code_for_module("cv2", submodule, DEBUG): 176 if DEBUG: print("Extra Python code for", submodule, "is loaded") 178 if DEBUG: print('OpenCV loader: DONE') File ~/opt/anaconda3/lib/python3.9/site-packages/cv2/__init__.py:28, in __load_extra_py_code_for_module(base, name, enable_debug_print) 26 native_module = sys.modules.pop(module_name, None) 27 try: --> 28 py_module = importlib.import_module(module_name) 29 except ImportError as err: 30 if enable_debug_print: File ~/opt/anaconda3/lib/python3.9/importlib/__init__.py:127, in import_module(name, package) 125 break 126 level += 1 --> 127 return _bootstrap._gcd_import(name[level:], package, level) File ~/opt/anaconda3/lib/python3.9/site-packages/cv2/typing/__init__.py:69, in <module> 65 import typing 68 if numpy.lib.NumpyVersion(numpy.__version__) > "1.20.0" and sys.version_info >= (3, 9): --> 69 NumPyArrayGeneric = numpy.ndarray[typing.Any, numpy.dtype[numpy.generic]] 70 else: 71 NumPyArrayGeneric = numpy.ndarray TypeError: 'numpy._DTypeMeta' object is not subscriptable
我已尝试卸载重装OpenCV、更新Anaconda,并用pip list检查可能冲突的包,但问题仍未解决。
解决方案
问题原因
该错误源于OpenCV的类型注解代码与高版本Numpy不兼容:Numpy 1.24+对numpy.dtype的子类化语法做了修改,而旧版OpenCV仍使用过时的numpy.dtype[...]下标写法,导致触发TypeError。
操作步骤(二选一即可)
降级Numpy到兼容版本
- 先查看当前Numpy版本:
pip show numpy - 降级到1.21.x版本(这个版本既满足OpenCV的版本要求,又兼容旧语法):
pip install numpy==1.21.6
- 先查看当前Numpy版本:
升级OpenCV到兼容高版本Numpy的版本
- 执行升级命令:
pip install --upgrade opencv-python
- 执行升级命令:
内容的提问来源于stack exchange,提问作者John Grace
相关产品推荐
相关产品推荐

