这一次编译 OpenCV 的 Python 依赖为了方便运行我们使用 Docker 进行编译,环境准备如下:

  1. 系统依赖:Ubuntu 18.04

  2. Python 版本:3.6,Ubuntu 18.04 官方源安装的默认版本

  3. OpenCV 版本:3.4.16,是目前 3.x 的最新版

  4. CMake 版本:3.10

  5. GCC 版本(含 C++):7.5

我们首先拉取并进入镜像:

docker pull ubuntu:18.04
docker run -it ubuntu:18.04 /bin/bash

然后我们配置下国内源:

cp /etc/apt/sources.list /etc/apt/sources.list.bak
sed -i "s@http://.*archive.ubuntu.com@http://repo.huaweicloud.com@g" /etc/apt/sources.list
sed -i "s@http://.*security.ubuntu.com@http://repo.huaweicloud.com@g" /etc/apt/sources.list

确认下源可用:

apt update

安装 CMake 和 GCC/g++ 环境:

apt install cmake
apt install gcc g++

这里 CMake 默认是 3.10 版本,GCC 和 g++ 都是 7.5 的版本。

然后继续安装 Python 环境和 NumPy 依赖:

apt install python3 python3-dev python3-numpy

然后安装 FFmpeg 基本的库和 GStreamer 视频插件:

apt install libavcodec-dev libavformat-dev libswscale-dev
apt install libgstreamer-plugins-base1.0-dev libgstreamer1.0-dev

然后安装必要的图像开发库:

apt install libpng-dev libjpeg-dev libopenexr-dev libtiff-dev libwebp-dev

如果需要界面的话得安装 GTK 组件,这个可选,我这里没有安装:

# GTK 2
apt install libgtk2.0-dev
# GTK 3
apt install libgtk-3-dev

然后下载 OpenCV 的源码包,通过链接 https://opencv.org/releases/ 下载,为了减小后续 Docker 镜像的大小,我们可以提前从外部把源码包映射进去,这样编译出来的内容不会影响镜像本身的大小,否则镜像会比较大。如果我们启动的时候忘记了引入外部卷,那么可以先编译完,然后把编译结果拷出去,然后再启动一个相同的原始镜像,直接映射编译好的完整的源码目录,上面的基础环境重新安装一遍后直接在编译好的基础上安装也是可以的,目的是为了减小镜像本身的大小。我们下面开始编译:

# 进入源码目录后执行
mkdir build
cd build
# 默认参数下会自动检测相关的依赖,正常是够用的
cmake ../

然后开始编译:

make -j4
# 安装
make install

安装之后我们测试一下 Python 依赖:

import cv2
print(cv2.__version__)

没问题的话我们可以退出容器:

exit

将结束的容器发布为镜像:

docker commit -m "OpenCV on Python3" -a "zengzy" <container-id> python3.6:opencv-3.4.16

然后可以删除原来的停止的容器。我们写个脚本测试下生成 H264 编码的视频:

import cv2
import numpy as np vid = cv2.VideoWriter('out.mp4', cv2.VideoWriter_fourcc(*'avc1'), 25, (300,300)) for i in range(250):
img = np.random.randint(0,255, (300,300,3), dtype=np.uint8)
vid.write(img)
vid.release()

保存脚本为 test_video_writer.py 然后运行下:

docker run --rm -w `pwd` -v `pwd`:`pwd` python3.6:opencv-3.4.16 python3 test_video_writer.py

可以正常生成 mp4 视频文件并且正常播放的话就没问题了。

Reference:

  1. https://docs.opencv.org/3.4.20/d2/de6/tutorial_py_setup_in_ubuntu.html

编译 OpenCV 的 Python 依赖的更多相关文章

  1. cmake编译opencv指南

    目录 cmake编译opencv指南 用包管理器安装 查看opencv相关的包 执行安装 编译安装 为什么编译安装 下载源码 编译脚本 执行编译脚本.解决3rdparty下载 编译后的设定-环境变量 ...

  2. Ubuntu 16.04下为Android编译OpenCV 3.2.0 Manager

    http://johnhany.net/2016/07/build-opencv-manager-for-android-on-ubuntu/ 最近想在Android上尝试一下SIFT和SURF匹配算 ...

  3. android studio 使用 jni 编译 opencv 完整实例 之 图像边缘检测!从此在andrid中自由使用 图像匹配、识别、检测

    目录: 1,过程感慨: 2,运行环境: 3,准备工作: 4,编译 .so 5,遇到的关键问题及其解决方法 6,实现效果截图. (原创:转载声明出处:http://www.cnblogs.com/lin ...

  4. android studio 使用 jni 编译 opencv 完整实例 之 图像边缘检测!

    目录: 1,过程感慨: 2,运行环境: 3,准备工作: 4,编译 .so 5,遇到的关键问题及其解决方法 6,实现效果截图. ------------------------------------- ...

  5. (原)windows8.1上使用opencv for python

    转载请注明出处: http://www.cnblogs.com/darkknightzh/p/6204100.html 参考网址: http://www.docs.opencv.org/master/ ...

  6. WIN7x64+VS2010+OpenCV2.4.10+cmake3.5.0重新编译OpenCV

    1,参考博文 Win7x64+VS2012+OpenCV2.4.3+CMake2.8.10+TBB41重编译OpenCV [OpenCV入门教程之七] 玩转OpenCV源代码:生成OpenCV工程解决 ...

  7. Ubuntu16.04安装opencv for python/c++

    Ubuntu16.04安装opencv for python/c++ 网上关于opencv的安装已经有了不少资料,但是没有一篇资料能让我一次性安装成功,因此花费了大量时间去解决各种意外,希望这篇能给一 ...

  8. 为OPENCV添加freetype支持并显示中文字符(在mac上编译opencv及contrib库)

    在mac电脑上管理这些gnu的库一般都使用Homebrew,但总有一些你个性化的需要是官方的Homebrew配方无法满足的.比如在屏幕的输出中使用中文字符. 在OPENCV中输出UTF8字符集早已经有 ...

  9. [转]Python依赖打包发布详细

    Python依赖打包发布详细   http://www.cnblogs.com/mywolrd/p/4756005.html 将Python脚本打包成可执行文件   Python是一个脚本语言,被解释 ...

  10. win10 + VS2010 + OpenCV2.4.10重编译OpenCV开发环境搭建

    win10 + VS2010 + OpenCV2.4.10重编译OpenCV开发环境搭建 重编译的优点:能够调试的时候看OpenCV的源码. 重编译要得到的东西:Debug版本号和Release版本号 ...

随机推荐

  1. 为什么defineProps宏函数不需要从vue中import导入?

    前言 我们每天写vue代码时都在用defineProps,但是你有没有思考过下面这些问题.为什么defineProps不需要import导入?为什么不能在非setup顶层使用defineProps?d ...

  2. 表单验证 validate 两种 一种是callback配合外部变量,当同步用。第2中是 then async await 这种 真正$api也适用

    validateFormRealProcessLeft () { let ret = false this.$refs.xxx.validate((valid) => { if (valid) ...

  3. Idea编译/运行Java程序慢

    修改前: 修改后: 参考: https://www.jjput.com/archives/macbookpro14m1mavenslowcompilation 问题 JDK尽量不要换版本 class ...

  4. Android混淆后的bug日志通过mapping文件找对应行号

    背景 由于项目中提测以及线上的apk都是经过混淆处理的,因此拿到日志后也无法正常查看崩溃日志的行号 这个原因是因为混淆了文件,输出的日志是对应不上源文件的,为了正确找到行号需要用到mapping.tx ...

  5. Linux Daemon & 单例模式 设计与实现

    PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明   本文作为本人csdn blog的主站的备份.(Bl ...

  6. management.endpoints.web.exposure.include

    yml配置文件中 management: endpoints: web: exposure: include: '*' properties配置文件中 management.endpoints.web ...

  7. 使用MFT进行加密文件传输的7个好处

    至少,托管文件传输(MFT)解决方案是一种产品,它包含入站和出站文件传输的所有方面,同时使用行业标准的网络协议和无缝加密.它可以从单个集中管理点在您的网络,系统,应用程序,贸易伙伴和云环境中自动化和传 ...

  8. GFLV2:边界框不确定性的进一步融合,提点神器 | CVPR 2021

      GFLV2基于GFLV1的bbox分布进行改进,将分布的统计信息融入到定位质量估计中,整体思想十分创新和完备,从实验结果来看,效果还是挺不错的 来源:晓飞的算法工程笔记 公众号 论文: Gener ...

  9. 开源鸿蒙(OpenHarmonyOS)代码下载及编译

    开源鸿蒙的代码仓在码云上,可以通过以下命令下载源码并编译 本机安装虚拟机 如本地已经安装可以忽略此步 安装指导:https://thoughts.teambition.com/share/614c49 ...

  10. python 1992和2006年国家标准学科分类和代码标准化并存入MySQL数据库

    数据表 代码 1 import pandas as pd 2 import pymysql 3 4 5 def get_subject_1992(): 6 res={} 7 the_former_co ...