本帖最后由 lulugl 于 2024-12-9 14:21 编辑

【前言】
OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉库,它提供了各种用于处理图像和视频数据的算法和工具。其功能涵盖了多个计算机视觉任务,包括但不限于图像滤波、特征提取、目标检测、图像分割、视频分析等众多领域。例如,在图像滤波方面,它可以通过不同的滤波算法(如高斯滤波、中值滤波等)去除图像中的噪声,使图像更加清晰。在特征提取领域,OpenCV 能够提取图像中的关键特征点(如 SIFT、SURF 等特征点),这些特征点对于图像匹配、目标识别等任务非常有用。
我准备处理人脸识别等项目,安装openCV是必须的。
1、执行conda install opencv
image.png
2、安装结束后,进入python环境,执行import cv2,但是出现报错:
(base) root@myd-lr3576x-debian:~# python
  • Python 3.12.2 | packaged by conda-forge | (main, Feb 16 2024, 20:38:53) [GCC 12.3.0] on linux                                          
  • Type "help", "copyright", "credits" or "license" for more information.                                                                  
  • >>> import cv2
  • Traceback (most recent call last):                                 
  •   File "<stdin>", line 1, in <module>                              
  • ImportError: /lib/aarch64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.32' not found (required by /root/miniconda3/lib/python3.12/site-packages/../../././libtbb.so.12)                                   
  • >>> print(cv2.__version__)
  • Traceback (most recent call last):                                 
  •   File "<stdin>", line 1, in <module>                              
  • NameError: name 'cv2' is not defined
  • 复制代码
    提示GLIBCXX_3.4.32没有找到。
    【解决方法】
    1、执行strings /lib/aarch64-linux-gnu/libstdc++.so.6 | grep GLIBCXX来查看下系统目前都有哪些版本的
    image.png
    看到提示的版本只支持GLBCXX_3.4.30所以与3.4.32不符合,所以报错。
    2、使用查找find / -name "libstdc++.so.6",看是不是系统上还有其他的版本
    (base) root@myd-lr3576x-debian:~# find / -name "libstdc++.so.6"
  • /usr/lib/aarch64-linux-gnu/libstdc++.so.6
  • /root/miniconda3/pkgs/libstdcxx-ng-11.2.0-h1234567_1/lib/libstdc++.so.6
  • /root/miniconda3/pkgs/libstdcxx-14.2.0-h3f4de04_1/lib/libstdc++.so.6
  • 复制代码
    在查找结果中,还有两个libstdc++.so.6
    3、查看其他文件的版支持:
    (base) root@myd-lr3576x-debian:~# strings /root/miniconda3/pkgs/libstdcxx-14.2.0-h3f4de04_1/lib/libstdc++.so.6 | grep GLIBCXX
  • GLIBCXX_3.4
  • GLIBCXX_3.4.1
  • GLIBCXX_3.4.2
  • GLIBCXX_3.4.3
  • GLIBCXX_3.4.4
  • GLIBCXX_3.4.5
  • GLIBCXX_3.4.6
  • GLIBCXX_3.4.7
  • GLIBCXX_3.4.8
  • GLIBCXX_3.4.9
  • GLIBCXX_3.4.10
  • GLIBCXX_3.4.11
  • GLIBCXX_3.4.12
  • GLIBCXX_3.4.13
  • GLIBCXX_3.4.14
  • GLIBCXX_3.4.15
  • GLIBCXX_3.4.16
  • GLIBCXX_3.4.17
  • GLIBCXX_3.4.18
  • GLIBCXX_3.4.19
  • GLIBCXX_3.4.20
  • GLIBCXX_3.4.21
  • GLIBCXX_3.4.22
  • GLIBCXX_3.4.23
  • GLIBCXX_3.4.24
  • GLIBCXX_3.4.25
  • GLIBCXX_3.4.26
  • GLIBCXX_3.4.27
  • GLIBCXX_3.4.28
  • GLIBCXX_3.4.29
  • GLIBCXX_3.4.30
  • GLIBCXX_3.4.31
  • GLIBCXX_3.4.32
  • GLIBCXX_3.4.33
  • 复制代码
    这个文件支持到了GLIBCXX_3.4.33说明这个文件是可用的
    4、将这个文件复制到/usr/lib/aarch64-linux-gnu/目录下:
    (base) root@myd-lr3576x-debian:~# cp /root/miniconda3/pkgs/libstdcxx-14.2.0-h3f4de04_1/lib/libstdc++.so.6 /usr/lib/aarch64-linux-gnu/libstdc++.so.6
    复制代码

    【验证】
    再次进入python环境,导入cv2后再打印版本号,显示正确:
    (base) root@myd-lr3576x-debian:~# python
  • Python 3.12.2 | packaged by conda-forge | (main, Feb 16 2024, 20:38:53) [GCC 12.3.0] on linux
  • Type "help", "copyright", "credits" or "license" for more information.
  • >>> import cv2
  • >>> print(cv2.__version__)
  • 4.10.0
  • >>>
  • 复制代码
    虽然最后解决了问题,但是过程是非常长的,希望大家在这个版本下能快速解决这个问题。