在CentOS 7系统上安装OpenCV 3.4.4版本(支持C++和Python接口)是计算机视觉开发中的一项基础但关键的工作。这个特定版本(3.4.4)被广泛用于工业级应用开发,因为它既保持了稳定性又包含了SIFT/SURF等专利算法(在后续版本中这些算法被移到了opencv_contrib)。本文将详细介绍从源码编译安装的完整过程,包括依赖解决、编译选项配置、多语言接口支持等核心环节。
注意:虽然CentOS 7默认的Python版本是2.7,但我们会同时配置Python 3和Python 2.7的支持,以适应不同项目的需求。
首先更新系统并安装开发工具链:
bash复制sudo yum update -y
sudo yum groupinstall -y "Development Tools"
sudo yum install -y epel-release
安装CMake(版本需要≥3.5):
bash复制sudo yum install -y cmake3
sudo alternatives --install /usr/local/bin/cmake cmake /usr/bin/cmake3 20
对于Python 2.7(系统自带):
bash复制sudo yum install -y python-devel numpy
对于Python 3.6(推荐):
bash复制sudo yum install -y python36 python36-devel
python3.6 -m pip install numpy
验证numpy安装:
python复制python3.6 -c "import numpy; print(numpy.__version__)"
安装必须的图像编解码库:
bash复制sudo yum install -y libjpeg-turbo-devel libpng-devel libtiff-devel \
libwebp-devel openexr-devel
视频处理依赖:
bash复制sudo yum install -y ffmpeg-devel libdc1394-devel libv4l-devel
下载指定版本源码和contrib模块:
bash复制wget -O opencv-3.4.4.zip https://github.com/opencv/opencv/archive/3.4.4.zip
wget -O opencv_contrib-3.4.4.zip https://github.com/opencv/opencv_contrib/archive/3.4.4.zip
unzip opencv-3.4.4.zip
unzip opencv_contrib-3.4.4.zip
创建编译目录:
bash复制mkdir -p opencv-3.4.4/build
cd opencv-3.4.4/build
关键配置选项说明:
bash复制cmake \
-D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D INSTALL_C_EXAMPLES=ON \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-3.4.4/modules \
-D BUILD_EXAMPLES=ON \
-D BUILD_opencv_python2=ON \
-D BUILD_opencv_python3=ON \
-D PYTHON3_EXECUTABLE=/usr/bin/python3.6 \
-D PYTHON3_INCLUDE_DIR=/usr/include/python3.6m \
-D PYTHON3_LIBRARY=/usr/lib64/libpython3.6m.so \
-D PYTHON3_NUMPY_INCLUDE_DIRS=/usr/local/lib/python3.6/site-packages/numpy/core/include \
-D WITH_FFMPEG=ON \
-D WITH_GTK=ON \
-D WITH_OPENGL=ON \
..
重要:如果只需要Python3支持,可以关闭BUILD_opencv_python2以加快编译速度。
启动编译(根据CPU核心数调整j参数):
bash复制make -j4
sudo make install
sudo ldconfig
验证安装:
bash复制pkg-config --modversion opencv
检查Python绑定位置:
bash复制ls -l /usr/local/lib/python3.6/site-packages/cv2*
创建符号链接(如果需要):
bash复制sudo ln -s /usr/local/lib/python3.6/site-packages/cv2.cpython-36m-x86_64-linux-gnu.so /usr/lib/python3.6/site-packages/cv2.so
测试Python接口:
python复制import cv2
print(cv2.__version__)
创建CMake示例项目测试:
cmake复制cmake_minimum_required(VERSION 3.5)
project( OpenCVTest )
find_package( OpenCV REQUIRED )
include_directories( ${OpenCV_INCLUDE_DIRS} )
add_executable( test test.cpp )
target_link_libraries( test ${OpenCV_LIBS} )
编译并运行测试程序:
bash复制g++ test.cpp -o test `pkg-config --cflags --libs opencv`
./test
问题1:FFmpeg相关错误
解决方案:确保安装了正确版本的ffmpeg开发包:
bash复制sudo yum install -y ffmpeg ffmpeg-devel
问题2:Python绑定生成失败
检查项:
问题:导入cv2时出现undefined symbol
通常是由于库路径问题:
bash复制export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
或者重建库缓存:
bash复制sudo ldconfig
如果需要保留多个OpenCV版本,建议:
bash复制export OpenCV_DIR=/path/to/opencv-3.4.4
完全卸载当前安装:
bash复制cd opencv-3.4.4/build
sudo make uninstall
sudo rm -rf /usr/local/include/opencv2 /usr/local/lib/libopencv*
测试一个完整的图像处理流程:
python复制import cv2
# 读取图像
img = cv2.imread('test.jpg')
# 特征检测
sift = cv2.xfeatures2d.SIFT_create()
kp = sift.detect(img, None)
# 绘制特征点
result = cv2.drawKeypoints(img, kp, None)
# 保存结果
cv2.imwrite('result.jpg', result)
这个安装过程虽然步骤较多,但通过源码编译可以获得最佳的兼容性和性能表现。在实际项目中,建议将整个安装过程脚本化以便于重复部署。