在CentOS 7上安装OpenCV 3.4.4需要先确保系统环境满足基本要求。我建议使用全新的CentOS 7最小化安装作为起点,这样可以避免各种依赖冲突问题。首先更新系统基础组件:
bash复制sudo yum update -y
sudo yum install -y epel-release
开发工具链是编译OpenCV的必备条件,需要安装以下基础包组:
bash复制sudo yum groupinstall -y "Development Tools"
sudo yum install -y cmake3 git wget
注意:CentOS 7默认的cmake版本较旧,建议通过cmake3软件包安装较新版本。后续编译时需要使用
cmake3命令而非cmake
对于Python支持,我们需要明确使用Python 2.7还是Python 3。由于CentOS 7默认安装Python 2.7,但OpenCV对Python 3的支持更好,建议同时安装两者:
bash复制sudo yum install -y python-devel python3-devel
OpenCV的功能模块依赖于许多第三方库,以下是必须安装的系统级依赖:
bash复制sudo yum install -y gtk2-devel libpng-devel libjpeg-devel libtiff-devel \
jasper-devel libdc1394-devel ffmpeg-devel gstreamer-plugins-base-devel \
numpy python3-numpy
对于视频编解码支持,还需要额外安装以下编码器:
bash复制sudo yum install -y x264-devel x265-devel libvpx-devel
如果计划使用OpenCV的contrib模块,需要提前安装这些额外依赖:
bash复制sudo yum install -y tesseract-devel openblas-devel
实操心得:在安装依赖时经常会遇到包名不一致的问题。如果yum找不到某个包,可以尝试
yum search命令查找相似名称的包,或者通过源码编译安装
建议在用户主目录下创建工作目录,保持环境整洁:
bash复制mkdir ~/opencv_build && cd ~/opencv_build
下载OpenCV 3.4.4和对应的contrib模块源码:
bash复制wget -O opencv-3.4.4.tar.gz https://github.com/opencv/opencv/archive/3.4.4.tar.gz
wget -O opencv_contrib-3.4.4.tar.gz https://github.com/opencv/opencv_contrib/archive/3.4.4.tar.gz
tar -xzvf opencv-3.4.4.tar.gz
tar -xzvf opencv_contrib-3.4.4.tar.gz
创建编译目录并进入:
bash复制mkdir -p ~/opencv_build/opencv-3.4.4/build
cd ~/opencv_build/opencv-3.4.4/build
使用cmake配置编译选项,这是最关键的一步。以下是我经过多次测试后推荐的基础配置:
bash复制cmake3 -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D INSTALL_C_EXAMPLES=ON \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D OPENCV_GENERATE_PKGCONFIG=ON \
-D OPENCV_EXTRA_MODULES_PATH=~/opencv_build/opencv_contrib-3.4.4/modules \
-D BUILD_EXAMPLES=ON \
-D WITH_GTK=ON \
-D WITH_FFMPEG=ON \
-D WITH_V4L=ON \
-D WITH_LIBV4L=ON \
-D BUILD_opencv_python2=ON \
-D BUILD_opencv_python3=ON \
-D PYTHON2_EXECUTABLE=/usr/bin/python2.7 \
-D PYTHON3_EXECUTABLE=/usr/bin/python3 \
-D PYTHON2_INCLUDE_DIR=/usr/include/python2.7 \
-D PYTHON3_INCLUDE_DIR=/usr/include/python3.6m \
-D PYTHON2_LIBRARY=/usr/lib64/libpython2.7.so \
-D PYTHON3_LIBRARY=/usr/lib64/libpython3.6m.so \
-D PYTHON2_NUMPY_INCLUDE_DIRS=/usr/lib64/python2.7/site-packages/numpy/core/include \
-D PYTHON3_NUMPY_INCLUDE_DIRS=/usr/lib64/python3.6/site-packages/numpy/core/include \
..
重要提示:如果编译过程中出现某些模块下载失败(如face_landmark_model.dat等),可以手动下载这些文件并放到指定目录,然后重新cmake
配置完成后,开始编译过程。根据CPU核心数设置合适的并行编译参数:
bash复制make -j$(nproc)
编译完成后进行安装:
bash复制sudo make install
sudo ldconfig
验证安装是否成功:
bash复制pkg-config --modversion opencv
对于Python绑定,需要确认.so文件是否正确安装到Python路径:
bash复制ls -l /usr/local/lib/python2.7/site-packages/cv2.so
ls -l /usr/local/lib/python3.6/site-packages/cv2.so
常见问题:如果Python import cv2时报错,可能是因为.so文件没有正确链接。可以手动创建符号链接:
bash复制sudo ln -s /usr/local/lib/python2.7/site-packages/cv2.so /usr/lib/python2.7/site-packages/cv2.so sudo ln -s /usr/local/lib/python3.6/site-packages/cv2.so /usr/lib/python3.6/site-packages/cv2.so
配置动态链接库路径,在/etc/ld.so.conf.d/目录下创建opencv.conf文件:
bash复制sudo sh -c 'echo "/usr/local/lib" > /etc/ld.so.conf.d/opencv.conf'
sudo ldconfig
设置环境变量,在~/.bashrc文件中添加:
bash复制export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
然后执行:
bash复制source ~/.bashrc
测试C++程序编译和运行:
cpp复制// test_opencv.cpp
#include <opencv2/opencv.hpp>
#include <iostream>
int main() {
cv::Mat image = cv::Mat::zeros(300, 600, CV_8UC3);
cv::putText(image, "Hello OpenCV", cv::Point(150,150),
cv::FONT_HERSHEY_COMPLEX, 1, cv::Scalar(0,255,255), 1);
cv::imshow("Test", image);
cv::waitKey(0);
return 0;
}
编译并运行:
bash复制g++ test_opencv.cpp -o test_opencv `pkg-config --cflags --libs opencv`
./test_opencv
测试Python绑定:
python复制import cv2
print(cv2.__version__)
img = cv2.imread('test.jpg', cv2.IMREAD_COLOR)
cv2.imshow('Test', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
问题1:编译过程中内存不足
解决方案:减少并行编译线程数,使用make -j2替代make -j$(nproc)
问题2:视频编解码支持不完整
解决方案:重新配置时添加以下选项:
bash复制-D WITH_OPENCL=OFF \
-D WITH_IPP=OFF \
-D WITH_1394=OFF \
问题3:Python导入时报undefined symbol错误
解决方案:这通常是Python版本不匹配导致的,可以尝试:
bash复制sudo rm -rf /usr/local/lib/python*/site-packages/cv2.so
然后重新编译安装
问题4:GTK相关错误
解决方案:安装完整GTK开发包:
bash复制sudo yum install -y gtk2-devel gtk3-devel
问题5:FFmpeg支持问题
解决方案:确保安装了正确版本的FFmpeg开发包:
bash复制sudo yum install -y ffmpeg-devel --enablerepo=epel
为了获得最佳性能,可以考虑以下优化措施:
bash复制sudo yum install -y tbb-devel
然后在cmake配置中添加:
bash复制-D WITH_TBB=ON \
bash复制sudo yum install -y openblas-devel
cmake配置:
bash复制-D WITH_OPENBLAS=ON \
bash复制-D WITH_CUDA=ON \
-D CUDA_ARCH_BIN="5.3 6.2 7.2" \
-D CUDA_ARCH_PTX="" \
bash复制-D ENABLE_FAST_MATH=ON \
-D WITH_OPENMP=ON \
性能测试技巧:编译完成后可以使用OpenCV自带的性能测试工具:
bash复制./bin/opencv_perf_core ./bin/opencv_perf_imgproc
如果需要同时保留多个OpenCV版本,可以采用以下方案:
bash复制-D CMAKE_INSTALL_PREFIX=/usr/local/opencv-3.4.4
bash复制export LD_LIBRARY_PATH=/usr/local/opencv-3.4.4/lib:$LD_LIBRARY_PATH
export PKG_CONFIG_PATH=/usr/local/opencv-3.4.4/lib/pkgconfig:$PKG_CONFIG_PATH
bash复制python3 -m venv opencv_env
source opencv_env/bin/activate
pip install numpy
如果遇到兼容性问题需要降级,可以按照以下步骤操作:
bash复制cd ~/opencv_build/opencv-3.4.4/build
sudo make uninstall
bash复制sudo rm -rf /usr/local/include/opencv2
sudo rm -rf /usr/local/lib/libopencv*
对于C++项目开发,建议的CMake项目配置示例:
cmake复制cmake_minimum_required(VERSION 3.5)
project(OpenCVTest)
find_package(OpenCV REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})
add_executable(test_app test.cpp)
target_link_libraries(test_app ${OpenCV_LIBS})
对于Python开发,推荐使用virtualenv创建隔离环境:
bash复制python3 -m venv myproject
source myproject/bin/activate
pip install numpy matplotlib
在PyCharm等IDE中配置OpenCV开发环境:
长期维护OpenCV环境的建议:
bash复制sudo yum update
bash复制cp ~/opencv_build/opencv-3.4.4/build/CMakeCache.txt ~/opencv_build/opencv-3.4.4.cache
bash复制#!/bin/bash
# OpenCV 3.4.4 installation script
# Record all commands and parameters
dockerfile复制FROM centos:7
RUN yum update -y && yum install -y epel-release && \
yum groupinstall -y "Development Tools" && \
yum install -y cmake3 git wget python3-devel
当需要升级到新版本时,建议: