opencv在cmake的时候有两个问题,ippicv长时间卡住下载失败,ffmpeg不会卡住但是也不会配置成功。所以这两个包只能手动下载安装。
ippicv是什么
OpenCV设计用于高效的计算,十分强调实时应用的开发。它由C++语言编写并进行了深度优化,从而可以享受多线程的优势,如果希望得到更多在英特尔架构上的自动优化,可以购买英特尔的集成性能基元(IPP)库,该库包含了许多算法领域的底层优化程序。在库安装完毕的情况下OpenCV在运行的时候会自动调用合适的IPP库。从OpenCV3.0开始,英特尔许可OpenCV研发团队和OpenCV社区拥有一个免费的IPP库的字库(称IPPICV),该子库默认集成在OpenCV中并在运算时发挥效用。
所以ippicv主要是在英特尔架构上有优化加成,如果不是,cmake等待下载失败也是能用的。
ffmpeg是什么
opencv是计算机视觉的库,ffmpeg是一个处理媒体流(视频、音频)的开源软件。当然。如果你下载的是完整的ffmpeg的构建包,那么里面的源代码也可以直接拿来当作处理媒体流的API。opencv中嵌入ffmpeg是因为opencv处理媒体流时需要ffmpeg的编解码和一系列IO函数进行操作,最典型的地方就在于VideoWriter这个类,他需要调用ffmpeg的视频流IO函数才能将视频写入本地。
这是opencv支持的编码格式,最好是安装,不然很多格式视频就不能处理。
2.1 根据opencv版本下载,opencv-3.4.1/3rdparty/ippicv/ippicv.cmake查看版本
下载地址:https://github.com/opencv/opencv_3rdparty/tree/ippicv/master_20170822/ippicv
按版本切换分支。比如:ippicv_2017u3_lnx_intel64_general_20170822.tgz
2.2 修改opencv-3.4.1/3rdparty/ippicv/ippicv.cmake文件的下载地址改为本地路径,47行 链接改成文件路径 "file:///home/downloads/"
ippicv就配置好了。cmake时候就会读取本地文件。
3.1 同样进入 opencv-3.4.1/3rdparty/ffmpeg/ffmpeg.cmake 查看版本
下载地址:Branches · opencv/opencv_3rdparty · GitHub
ffmpeg/master_20180220_src/sources/build/ffmpeg 里面的
3.2 解压后就是可编译的源码,编译之前先下载安装所需要的库,避免一些编译或者使用的错误。
sudo apt-get install build-essential
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
3.3 进入解压目录下,配置configure文件,--prefix=/usr/local/ffmpeg 是设置ffmpeg安装目录
./configure --enable-shared --disable-static --disable-x86asm --prefix=/usr/local/ffmpeg
3.4 make编译源码
make -j16
3.5 make install 安装 ffmpeg 到之前配置的安装目录。
sudo make install
3.6 安装完目录
3.7 配置使用环境,
sudo vim /etc/ld.so.conf
/usr/local/ffmpeg
/usr/local/ffmpeg/lib
sudo ldconfig
sudo vim /etc/profile
export PATH="/usr/local/ffmpeg/bin:$PATH"
source /etc/profile
3.8 确认是否安装成功 输入 指令 ffmpeg
sudo apt-get install ffmpeg
5.1 下载地址 Releases - OpenCV 这里选择 opencv-3.4.1
解压后目录下新建一个build文件夹用于编译。
编译之前先安装cmake和一些依赖库
sudo apt-get cmake
sudo apt-get install build-essential
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
进入build文件夹 执行 cmake 编译配置文件, 生成opencv.pc文件 和 开启ffmpeg功能
cmake -D OPENCV_GENERATE_PKGCONFIG=ON -D WITH_FFMPEG=ON ..
ffmpeg 已经开启。
5.2 make 编译源码
make -j16
5.3 make install 安装
sudo make install
opencv会安装到 /usr/local 目录下
5.4 添加环境
sudo vim /etc/ld.so.conf
/usr/local/lib
sudo ldconfig
INCLUDEPATH += /usr/local/include/opencv\
/usr/local/include/opencv2\LIBS+= /usr/local/lib/libopencv_calib3d.so
LIBS+=/usr/local/lib/libopencv_core.so
LIBS+=/usr/local/lib/libopencv_dnn.so
LIBS+=/usr/local/lib/libopencv_features2d.so
LIBS+=/usr/local/lib/libopencv_flann.so
LIBS+=/usr/local/lib/libopencv_highgui.so
LIBS+=/usr/local/lib/libopencv_imgcodecs.so
LIBS+=/usr/local/lib/libopencv_imgproc.so
LIBS+=/usr/local/lib/libopencv_ml.so
LIBS+=/usr/local/lib/libopencv_objdetect.so
LIBS+=/usr/local/lib/libopencv_photo.so
LIBS+=/usr/local/lib/libopencv_shape.so
LIBS+=/usr/local/lib/libopencv_stitching.so
LIBS+=/usr/local/lib/libopencv_superres.so
LIBS+=/usr/local/lib/libopencv_videoio.so
LIBS+=/usr/local/lib/libopencv_video.so
Error: OpenCV(3.4.1) Error: Assertion failed (chunk.m_size <= 0xFFFF) in
cv::AVIReadContainer::readFrame, file D:\Build\OpenCV\opencv-
3.4.1\modules\videoio\src\container_avi.cpp, line 514
问题原因:源码文件modules/videoio/src/container_avi.cpp中 514行设置的视频容量上限值小了,我们设置一个更大的值。
CV_Assert(chunk.m_size <= 0xFFFF);
改成CV_Assert(chunk.m_size <= 67108864);
67108864 这个值是opencv 高版本中官方设置的值,但是低版本中官方并没有修复。
然后重新编译 -》重新安装