centos 编译opencv centos7
大家好,centos 编译opencv相信很多的网友都不是很明白,包括centos7也是一样,不过没有关系,接下来就来为大家分享关于centos 编译opencv和centos7的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开始吧!
linux+jdk8+opencv341最轻最小docker基础镜像制作
为在Docker容器中集成Linux、JDK8和OpenCV3.4.1,我们需要创建一个轻量级的基础镜像。首先,尝试使用CentOS7、JDK8和OpenCV的组合,但发现镜像体积过大。然后,我们转向了更轻量级的openjdk:8-jre-alpine作为起点,添加OpenCV编译产物。经过一系列操作,最终的jre-alpine-opencv基础镜像体积缩减至约157M。
以下是制作过程的简化版:
1.开始时,使用openjdk:8-jre-alpine作为基础镜像,但由于需要OpenCV,所以考虑增加它。但是,直接在alpine基础上添加OpenCV会导致镜像过大,体积超过85M。
2.为解决此问题,我们尝试了从CentOS7开始,但体积达453M,于是放弃了。不过,这个过程中我们学会了如何在CentOS7上安装OpenCV并编译,然后修复了so文件警告。
3.后来,我们决定在openjdk:8-jre-alpine基础上添加OpenCV,通过将CentOS7容器中的OpenCV编译产物复制到alpine容器,创建出了jre-alpine-opencv镜像,体积控制在157M,实现了最小体积的要求。
可以直接从以下地址下载已打包好的镜像:
docker pull ccr.ccs.tencentyun.com/...
docker pull registry.cn-hangzhou.aliyuncs.com...
CentOS下OpenCV无法读取视频文件如何解决
在CentOS下,按照教程的步骤安装OpenCV,但到最后无法读取视频文件,原因是缺少了ffmpeg。于是通过CentOS中的软件管理安装ffmqeg,但还是没有效果。然后对ffmpeg进行编译,还是没有效果。其实漏了一个关键步骤,就是将ffmpeg于OpenCV关联起来。具体如下:
1、获得ffmpeg:
通过cvs下载ffmpeg,命令行输入: svn checkout svn://svn.ffmpeg.org/ffmpeg/trunk ffmpeg
2、配置ffmpeg:
进入ffmpeg目录,执行./configure--enable-shared--prefix=/usr(enabled-shared估计都知道意思,但是为什么要 prefix=/usr呢,这得从opencv的CMakeLists.txt和heighgui下的cvcap_ffmpeg.cpp说起了,这里涉及到的问题不要使路径问题,但是也就是这个问题,搞得我去了一个早上。cMakeLists.txt中关于检测是否有安装ffmpeg时,默认是到/usr下去检测相应的头文件之类的是否存在的,但是ffmpeg的默认安装是安装在/usr/local下的,问题就来了,所以改一下安装路径opencv在 cmake.时就无法检测到你是否已经安装了ffmpeg);
3、make;su-c make install;
4、接下来要做的工作就是关系到opencv能否成功将ffmpeg的相关头文件编译进来的问题了:
4.1)首先在/usr/include下执行以下命令(root):
mkdir ffmpeg;
cp libav* libsw* ffmpeg;//之所以这么做,是因为opencv configure时检查是否已安装ffmpeg是在这
检查的
4.2)cmake.;//注意,cmake和.之间有空格,如果以上步骤都没错的话,一概可以看到 opencv的
configure结果中ffmpeg为1,不是之前的0,说明我们成功了。
4.3)make install;
5、将/usr/local/lib/pkgconfig下的opencv.pc cp到/usr/lib/pkgconfig下,这一步也可以做,只是一个配置文件,大不了编译时自己指定头文件和库么,其实你打开opencv.pc一看就知道是什么玩意了。
6、root下, vim/etc/ld.so.conf,增加一行,/usr/local/lib(因为opencv的库文件在local,默认情况下local/lib中的库文件是不在系统启动时被load的)
7、ldconfig。