在linux下编译python3-opencv

    关于linux下编译Opencv已经有许许多多的相关文章,包括一些需要依赖的库,在此不再赘述,本文主要的目的是为了解决在python2 与 python3同时存在时,如何仅编译python3-opencv的方法.

    需要使用到的工具链请读者们自行配置,本人在编译时使用的是fedora24 + python 3.5.1 + opencv3.1.

    由于在linux下安装gtk-devel时会引入python2的安装,导致在使用cmake时会检测到两个python版本,而cmake会倾向于使用低版本的python,也就是会选择python2,这时我们需要加入参数来修改这个倾向.

<span style="font-family:SimSun;">cmake -D CMAKE_BUILD_TYPE=RELEASE  \
	-D INSTALL_C_EXAMPLES=OFF \
	-D INSTALL_PYTHON_EXAMPLES=ON \
	-D BUILD_EXAMPLES=OFF \
	-D BUILD_opencv_python3=ON  \
	-D BUILD_opencv_python2=OFF  \
	-D BUILD_opencv_java=OFF  \
	-D PYTHON_EXECUTABLE=$(which python3)  \
	-D OPENCV_EXTRA_MODULES_PATH=<your extra modules path>  ..</span>

    这里我们关闭编译python2-opencv,因为我们没有安装python2相关的编译依赖库,如果尝试编译会造成错误,况且我们也不是为了编译python2的版本,所以干脆关掉. 

 配置完后,我们直接执行

 #  make –j8 


 大约30分钟左右能完成opencv3.1的编译,效果如下:

 

 这里生成的cv2.cpython-35m-x86_64-linux-gnu.so就是我们编译成功的opencv模块了.现在我们就可以在python3中使用opencv3.1了.

 



    这里附带提一下,如果要编译视频处理模块,需要自行编译ffmpeg,本人在编译的时候使用的是 2.6.9的版本,由于高版本存在函数移除导致opencv编译失败,所以还是老实点用低版本,具体编译可自行百度,或翻墙谷歌.

    如果自行编译ffmpeg,那么在编译opencv时还会遇到静态库在链接中产生的无法重定位的错误.可以这样解决.

    在编译ffmpeg前使用此种参数

    #  ./configure --enable-shared --disable-static        

   #  make –j8 && make install

   

   我们使用共享库来完成opencv的编译,这时需要修改opencv源码目录下有个叫OpenCVFindLibsVideo.cmake的文件.

# sed -i -e's/libavformat\.a/libavformat.so/g' \

      -e 's/libavutil\.a/libavutil.so/g' \

      -e 's/libswscale\.a/libswscale.so/g' \

      -e's/libavresample\.a/libavresample.so/g' \

      -e 's/libavcodec\.a/libavcodec.so/g' \

              OpenCVFindLibsVideo.cmake


 这条命令是用于替换cmake中的文本,将对(*.a)的依赖改为对(*.so)的依赖,也就是使用动态库完成链接.

 这样编译就不会出现不能重定位的错误.



 opencv 与cmake的安装过程可以参考文章: http://docs.opencv.org/3.1.0/dd/dd5/tutorial_py_setup_in_fedora.html#gsc.tab=0

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值