编译opencv

linux下OPENCV编译安装指定python接口

1,安装依赖库

#更新一下ubuntu下的包
sudo apt-get update
sudo apt-get upgrade


#移除之前x264
sudo apt-get remove x264 libx264-dev

#依赖库安装
sudo apt-get install build-essential
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev 
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev

sudo apt-get install build-essential libgtk2.0-dev libgtk-3-dev libavcodec-dev libavformat-dev libjpeg-dev libswscale-dev libtiff5-dev

sudo apt-get update

2,解压OPENCV-.zip和OPENCV_contr*.zip

unzip opencv***.zip
unzip opencv-co****.zip -d opencv**

cd opencv-4.6.0
mkdir build
cd build

3,CMake编译安装时的参数指定

  • 首先进入你的conda环境里面

  • conda activate py38
    
  • 找一下该虚拟环境里python的一些包的路径

  • python#进入python
    import sys
    sys.path
    
    ['', '/home/chen/miniconda3/envs/py38/lib/python38.zip', '/home/chen/miniconda3/envs/py38/lib/python3.8', '/home/chen/miniconda3/envs/py38/lib/python3.8/lib-dynload', '/home/chen/miniconda3/envs/py38/lib/python3.8/site-packages']
    
    
    #记下以下路径
    #python3.8包的安装路径:
    /home/chen/miniconda3/envs/py38/lib/python3.8/site-packages
    #python3.8的动态库路径(libpython3.8.so)
    sudo find / -name libpython3.8.so #找到这个动态库:
    /home/chen/miniconda3/pkgs/python-3.8.0-h0371630_2/lib/libpython3.8.so
    #python3.8的头文件
    sudo find / -name Python.h
    /home/chen/miniconda3/pkgs/python-3.10.10-h7a1cb2a_2/include/python3.10/Python.h
    /home/chen/miniconda3/pkgs/python-3.8.0-h0371630_2/include/python3.8/Python.h
    /home/chen/miniconda3/envs/py38/include/python3.8/Python.h #是这个哦,要找你当前python环境的
    /home/chen/miniconda3/include/python3.10/Python.h
    #numpy的include路径
    #没有的话先安装一下
    pip install numpy
    sudo find / -type d -name numpy
    /home/chen/miniconda3/envs/py38/lib/python3.8/site-packages/numpy
    /home/chen/miniconda3/envs/py38/lib/python3.8/site-packages/numpy/core/include/numpy#这个***********
    
    
  • 整理一下得到以下路径

  • #python3.8包的安装路径:
    /home/chen/miniconda3/envs/py38/lib/python3.8/site-packages
    #python3.8的动态库路径(libpython3.8.so)
    /home/chen/miniconda3/pkgs/python-3.8.0-h0371630_2/lib/libpython3.8.so
    #python3.8的头文件
    /home/chen/miniconda3/envs/py38/include/python3.8/Python.h
    #numpy的include路径
    /home/chen/miniconda3/envs/py38/lib/python3.8/site-packages/numpy/core/include/numpy
    
  • 改一下CMake编译时的参数

  • cmake -D CMAKE_BUILD_TYPE=RELEASE \     #编译类型    
          -D CMAKE_INSTALL_PREFIX=/usr/local \ #依赖库安装的根目录,这个是默认值
          -D INSTALL_PYTHON_EXAMPLES=ON \  #python的example
          -D INSTALL_C_EXAMPLES=OFF \
          -D WITH_TBB=ON \
          -D WITH_V4L=ON \
          -D WITH_QT=OFF \
          -D WITH_OPENGL=ON \
          -D PYTHON3_EXECUTABLE=$(which python3) \ #指定你想要安装cv2这个包的python编译器路径
          -D BUILD_opencv_python3=ON \ #开启python3的cv2
          -D PYTHON3_LIBRARY=/opt/conda/pkgs/python-3.8.5-h7579374_1/lib/libpython3.8.so \# python3.8的动态库的路径
          -D PYTHON3_INCLUDE_DIR=/opt/conda/pkgs/python-3.8.5-h7579374_1/include/python3.8/Python.h \#python3.8的头文件
          -D PYTHON3_NUMPY_INCLUDE_DIRS=/home/chen/miniconda3/envs/py38/lib/python3.8/site-packages/numpy/core/include/numpy \ #numpy的include路径
          -D PYTHON3_PACKAGES_PATH=/opt/conda/lib/python3.8/site-packages/ #python3.8包的安装路径../
    
    修改后得到
    #在build目录下运行下面这段
    cmake -D CMAKE_BUILD_TYPE=RELEASE \
          -D CMAKE_INSTALL_PREFIX=/usr/local \
          -D INSTALL_PYTHON_EXAMPLES=ON \
          -D INSTALL_C_EXAMPLES=OFF \
          -D WITH_TBB=ON \
          -D WITH_V4L=ON \
          -D WITH_QT=OFF \
          -D WITH_OPENGL=ON \
          -D PYTHON3_EXECUTABLE=$(which python3) \
          -D BUILD_opencv_python3=ON \
          -D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib-4.6.0/modules \
          -D PYTHON3_LIBRARY=/home/chen/miniconda3/pkgs/python-3.8.0-h0371630_2/lib \
          -D PYTHON3_INCLUDE_DIR=/home/chen/miniconda3/envs/py38/include/python3.8 \
          -D PYTHON3_NUMPY_INCLUDE_DIRS=/home/chen/miniconda3/envs/py38/lib/python3.8/site-packages/numpy/core/include \
          -D PYTHON3_PACKAGES_PATH=/home/chen/miniconda3/envs/py38/lib/python3.8/site-packages ../
    
    预处理后得到如下说明安装python的cv2指定成功
    Python 3:
    --     Interpreter:                 /home/chen/miniconda3/envs/py38/bin/python3 (ver 3.8)
    --     Libraries:                   /home/chen/miniconda3/pkgs/python-3.8.0-h0371630_2/lib/libpython3.8.so
    --     numpy:                       /home/chen/miniconda3/envs/py38/lib/python3.8/site-packages/numpy/core/include/numpy (ver 1.24.3)
    --     install path:                /home/chen/miniconda3/envs/py38/lib/python3.8/site-packages/cv2/python-3.8
    -- 
    --   Python (for build):            /home/chen/miniconda3/envs/py38/bin/python3
    
    
    编译OPENCV与python链接
    make -j8 #j*指定编译使用的线程数,根据自己的处理器指定,一般8就行了,多了任意报错
    #这是个漫长的等待过程
    
    转为汇编可执行文件链接动态库
    sudo make install #也是一个漫长的过程
    
    检验是否安装成功
    #进入python
    python
    import cv2
    #回车没报错就说明编译链接成功
    
问题总结:
1、下载不了IPPICV
# 1,cd到~/Desktop/opencv/opencv-4.6.0/3rdparty/ippicv$下面来
#修改它的.cmake配置文件的下载方式
# 将47行的
 
     "https://raw.githubusercontent.com/opencv/opencv_3rdparty/${IPPICV_COMMIT}ippicv/"
# 改为步骤1中手动下载的文件的本地路径(也就是将网络下载的模式改为本地文件下载的模式):
"file:///home/chen/Desktop/opencv/opencv-4.6.0/3rdparty/ippicv/" #(仅供参考,根据自己的路径填写)

#还要将下面设定的文件名,把你下载的ippvic文件名改成和他一样
#ippicv_2020_lnx_intel64_20191018_general.tgz
function(download_ippicv root_var)
  set(${root_var} "" PARENT_SCOPE)

  # Commit SHA in the opencv_3rdparty repo
  set(IPPICV_COMMIT "a56b6ac6f030c312b2dce17430eef13aed9af274")
  # Define actual ICV versions
  if(APPLE)
    set(OPENCV_ICV_PLATFORM "macosx")
    set(OPENCV_ICV_PACKAGE_SUBDIR "ippicv_mac")
    set(OPENCV_ICV_NAME "ippicv_2020_mac_intel64_20191018_general.tgz")
    set(OPENCV_ICV_HASH "1c3d675c2a2395d094d523024896e01b")
  elseif((UNIX AND NOT ANDROID) OR (UNIX AND ANDROID_ABI MATCHES "x86"))
    set(OPENCV_ICV_PLATFORM "linux")
    set(OPENCV_ICV_PACKAGE_SUBDIR "ippicv_lnx")
    if(X86_64)
      set(OPENCV_ICV_NAME "ippicv_2020_lnx_intel64_20191018_general.tgz")
      set(OPENCV_ICV_HASH "7421de0095c7a39162ae13a6098782f9")
    else()
      set(OPENCV_ICV_NAME "ippicv_2020_lnx_ia32_20191018_general.tgz")
      set(OPENCV_ICV_HASH "ad189a940fb60eb71f291321322fe3e8")
    endif()
  elseif(WIN32 AND NOT ARM)
    set(OPENCV_ICV_PLATFORM "windows")
    set(OPENCV_ICV_PACKAGE_SUBDIR "ippicv_win")
    if(X86_64)
      set(OPENCV_ICV_NAME "ippicv_2020_win_intel64_20191018_general.zip")
      set(OPENCV_ICV_HASH "879741a7946b814455eee6c6ffde2984")
    else()
      set(OPENCV_ICV_NAME "ippicv_2020_win_ia32_20191018_general.zip")
      set(OPENCV_ICV_HASH "cd39bdf0c2e1cac9a61101dad7a2413e")
    endif()
  else()
    return()
  endif()

  set(THE_ROOT "${OpenCV_BINARY_DIR}/3rdparty/ippicv")
  ocv_download(FILENAME ${OPENCV_ICV_NAME}
               HASH ${OPENCV_ICV_HASH}
               URL
                 "${OPENCV_IPPICV_URL}"
                 "$ENV{OPENCV_IPPICV_URL}"
                 "file:///home/chen/Desktop/opencv/opencv-4.6.0/3rdparty/ippicv/"
               DESTINATION_DIR "${THE_ROOT}"
               ID IPPICV
               STATUS res
               UNPACK RELATIVE_URL)

  if(res)
    set(${root_var} "${THE_ROOT}/${OPENCV_ICV_PACKAGE_SUBDIR}" PARENT_SCOPE)
  endif()
endfunction()
C++版本
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D INSTALL_C_EXAMPLES=ON \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D WITH_TBB=ON \
-D WITH_V4L=ON \
-D WITH_QT=ON \
-D WITH_OPENGL=ON \
-D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules \
-D BUILD_EXAMPLES=ON ..

配置路径,执行下面命令配置环境变量,注意如果你当前使用的是fish shell,或者别的shell,请退出到bash,不然配置会出问题。
sudo vim /etc/ld.so.conf.d/opencv.conf
这个时候你可能打开文件可能是空白的,没有关系,在文件末尾添加保存并退出
/usr/local/lib
执行生效命令:
sudo ldconfig
继续打开:
sudo vim /etc/bash.bashrc
在文件末尾添加写入:
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
保存退出。
执行更新命令:
source /etc/bash.bashrc
sudo updatedb

**

- 总结:

在yolo等深度学习模型1的时候,建议都用编译安装依赖,很多时候pip会疯狂报错!**

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学AI不秃头

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值