首页 > 代码库 > CentOS7配置opencv for python && eclipse c/c++

CentOS7配置opencv for python && eclipse c/c++

 

1, 卸载安装过程中有瑕疵的 opencv
    删除/usr/local/lib 和/usr/local/include/中的所有带 opencv 字眼的
    # rm -rf /usr/local/lib/libopencv*
    # rm -rf /usr/local/include/opencv*
    之后重新编译

2, 安装 ffmpeg
    安装 ffmpeg,直接 yum 显示没有 ffmpeg 软件包(因为与 centos7 相应的 epel, rpmforge 包正式版在我写这篇文章的时候,还没有出来,可能缺失某些软件),通过 svn 下载 ffmpeg
    # cd /home/zh/software/
    # mkdir ffmpeg
    # svn checkout svn://svn.ffmpeg.org/ffmpeg/trunk ffmpeg
    接着开始编译 ffmpeg
    # cd ffmpeg
    # ./configure --enable-shared
    由于 opencv 中的 CMakelists 默认是到/usr 目录下寻找 ffmpeg,故目录设置成/usr
    # make
    # make install
    编译 ffmpeg 出现问题,在 make 阶段出现如下错误:
    libavcodec/x86/h264_qpel_mmx.c:1294: Error: operand type mismatch for `cmp‘
    libavcodec/x86/h264_qpel_mmx.c:1294: Error: operand type mismatch for `cmp‘
    libavcodec/x86/h264_qpel_mmx.c:1298: Error: operand type mismatch for `cmp‘
    libavcodec/x86/h264_qpel_mmx.c:1298: Error: operand type mismatch for `cmp‘
    make: *** [libavcodec/x86/dsputil_mmx.o] Error 1
    baidu 后,解决办法如下,将 libavcodec/x86/h264_qpel_mmx.c 中的 ”g”替换为 ”rm”即可,采用如下方式,进入 vi,在 normal 模式下,输入:
    %s/"g"/"rm"/g
    即可

3, 安装 opencv 的其他依赖项
    google: install opencv for python in fedora
    发现:
    http://docs.opencv.org/trunk/doc/py_tutorials/py_setup/py_setup_in_fedora/py_setup_in_fedora.html
    按照上面所述,开始安装 opencv 的依赖项
    python 中的依赖项:
    yum install cmake
    yum install python-devel numpy
    yum install gcc gcc-c++
    opencv 的依赖项:
    yum install gtk2-devel
    yum install libdc1394-devel
    yum install libv4l-devel
    yum install ffmpeg-devel
    yum install gstreamer-plugins-base-devel
    注意:

    gtk2-devel 在 epel7/rpmforge7 软件源中已经包含(至于这两个源的安装,自己 google 吧)
    libv4l-devel,gstreamer-plugins-base-devel 也包含了
    而 ffmpeg 之前已经安装了,
    只有 libdc1394-devel 没有
    google 之,在
    http://rpm.pbone.net/index.php3/stat/4/idpl/26135132/dir/redhat_el_7/com/libdc1394-devel-2.2.0-4.el7.nux.x86_64.rpm.html
    网站能够找到 libdc1394-devel-2.2.0-4.el7.nux.x86_64.rpm
    安装 libdc1394-devel 时,发现还缺少 libdc1394.so.22()(64bit)
    google 之,在
    http://rpm.pbone.net/index.php3/stat/4/idpl/26135130/dir/redhat_el_7/com/libdc1394-2.2.0-4.el7.nux.x86_64.rpm.html
    能够找到 libdc1394-2.2.0-4.el7.nux.x86_64.rpm
    先安装 libdc1394-2.2.0-4.el7.nux.x86_64.rpm,
    # yum localinstall libdc1394-2.2.0-4.el7.nux.x86_64.rpm,安装成功
    再安装 libdc1394-devel-2.2.0-4.el7.nux.x86_64.rpm
    # yum localinstall libdc1394-devel-2.2.0-4.el7.nux.x86_64.rpm,安装成功
    至此,opencv 必须的依赖项已经全部安装完毕
    http://docs.opencv.org/trunk/doc/py_tutorials/py_setup/py_setup_in_fedora/py_setup_in_fedora.html
这个网站上还给了其他的一些可选依赖项,可以视情况而装

4, 安装 opencv
    在网上下载 opencv 源码
    解压后
    # cd opencv
    # mkdir release
    # cd release
    # cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local-D BUILD_PYTHON_SUPPORT=ON -D BUILD_EXAMPLES=ON ..
    # make
    wait long long time ......
    # make install
    大功告成

5, python 路径配置
    # cp /usr/local/lib/python2.7/site-packages/cv2.so /usr/lib/python2.7/site-packages
    # export PYTHONPATH=$PYTHONPATH:/usr/local/lib/python2.7/site-packages
    然后打开 python,import cv2 ,发现已经 OK 了

  

    发现 import cv2 已经无误了!!!
    It‘s so beautiful!!!

6, opencv 环境变量配置
    (eclipse 的安装以及 C/C++的安装,此处不讲)
    切换到 root 用户# vi /etc/ld.so.conf.d/opencv.conf
    加入/usr/local/lib
    # ldconfig
    # cd        返回默认目录
    # vi .bashrc     在最后加上 PKG_CONFIG_PATH=/usr/local/lib/pkgconfig 和 export PKG_CONFIG_PATH 两行
    # reboot

7, 配置 eclipse
    重启后,打开 eslipse,新建 C++工程
    工程建好后,进入
    Project->Properties->C/C++ Build->Settings
    在 GCC C++ Compiler->includes
      include paths 中加入:
        /usr/local/include/opencv

    

    在 GCC C++ Linker->Libraries 里
      Library search path 里,加入
      /usr/local/lib
        Libraries 里加入
        opencv_core; opencv_imgproc; opencv_highgui; opencv_ml; opencv_video; opencv_features2d; opencv_calib3d; opencv_objdetect; opencv_contrib; opencv_legacy; opencv_flann

    

下面写入测试代码:

#include <iostream>#include <cv.h>#include <highgui.h>using namespace std;int main ( int argc, char **argv ){    IplImage *pImg = cvLoadImage("/home/zh/1.jpg");    cvNamedWindow("Image", 1);    cvShowImage("Image", pImg);    cvWaitKey(0);    cout << "!!!Hello World!!!" << endl; // prints !!!Hello World!!!    return 0;}

如果正确显示图片,那就是无误了。

ELSE:
发现 eclipse 一个小小的坑爹的地方,命名代码没有错误,他还总是画红色波浪线,说有错误,说不存在该变量或者啥的,但是运行是无误的,如下图示:

 

对 eclipse 甚是无语