在AGX编译安装opencv-python及opencv-contrib-python有两个途径
一、pip安装(以4.4.0.46版本为例)
sudo pip3 install opencv-python==4.4.0.46
sudo pip3 install opencv-contrib-python==4.4.0.46
pip安装只适合python接口调用,若用c++接口,则需要源码编译安装。
二、源码编译安装
源码编译安装在终端输入cmake预编译指令,编译出来即可满足c++,python接口调用,也可支持GPU。
云盘链接: https://pan.baidu.com/s/1U4LqcfDoH0RS33MPi4fM6w 密码: rqn2
opencv的扩展模块及编译需要下载的各种*.i文件都在opencv-4.4.0.zip里了
mkdir build;cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local/opencv4 -D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib-4.4.0/modules -D WITH_CUDA=1 -D WITH_CUDNN=1 -D OPENCV_DNN_CUDA=1 -D ENABLE_FAST_MATH=1 -D CUDA_FAST_MATH=1 -D ENABLE_FAST_MATH=1 -D WITH_CUBLAS=1 -D HAVE_opencv_python3=1 -DBUILD_opencv_python3=ON -D OPENCV_GENERATE_PKGCONFIG=1 -D CUDA_ARCH_BIN=7.2 -D PYTHON_DEFAULT_EXECUTABLE=$(python3 -c "import sys; print(sys.executable)") -D PYTHON3_EXECUTABLE=$(python3 -c "import sys; print(sys.executable)") -D PYTHON3_NUMPY_INCLUDE_DIRS=$(python3 -c "import numpy; print (numpy.get_include())") -D PYTHON3_PACKAGES_PATH=$(python3 -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())") ..
注意:
0、CMAKE_INSTALL_PREFIX:待安装位置
1、OPENCV_EXTRA_MODULES_PATH :拓展模块代码位置;
2、CUDA_ARCH_BIN :设备的cuda参数 AGX=7.2; TX2=6.2;
参考https://blog.csdn.net/CSS360/article/details/109696878
3、PYTHON_DEFAULT_EXECUTABLE: 默认的解释器
PYTHON3_EXECUTABLE: python3解释器
PYTHON3_NUMPY_INCLUDE_DIRS: python3的numpy头文件
PYTHON3_PACKAGES_PATH:python3版opencv动态库安装地址
有些博客还加了PYTHON_LIBRAR,这里没加也可以编译成功;make -j8
sudo make install
安装完成之后,打印编译信息,可以看到opencv编译版本是python3,python3的解释器、动态库等相关的信息也可看到。
import cv2
print(cv2.getBuildInformation())
三、示例:opencv-LSD算法python接口调用
按:LSD算法在opencv4中被移除到opencv-contrib模块
import cv2 as cv
import numpy as np
Img = cv.imread('lsd_img.png', 1)
gray_Img = cv.cvtColor(Img, cv.COLOR_BGR2GRAY)
lsd = cv.ximgproc.createFastLineDetector()
lsd_lines = lsd.detect(gray_Img)
result_img = lsd.drawSegments(gray_Img, lsd_lines)
for lsd_line in lsd_lines:
x0 = int(round(lsd_line[0][0]))
y0 = int(round(lsd_line[0][1]))
x1 = int(round(lsd_line[0][2]))
y1 = int(round(lsd_line[0][3]))
cv.line(Img, (x0, y0), (x1, y1), (0, 0, 255), 1)
cv.imshow("draw_Img", Img)
cv.waitKey(0)
出图效果