在Ubuntu10.04上安装OpenCV3.2.0(OpenCV4.01.3.4等失败)问题及心路历程记录

因为项目的原因,需要在一个很老的机子上安装OpenCV,老机子只能装Ubuntu10.04,反正硬着头皮上吧,之前也装过好几次,因为要读取网络摄像头,OpenCV版本太低也不行,必须要3.2.0以上videocapture类中才能用网址获取视频流,所以装高版本的OpenCV,反正都会有问题,直接装最新的,just do it。

环境:Ubuntu10.04 i386版本,OpenCV 4.01,通过CMake 3.6.3编译

首先官网下载OpenCV4.01.zip,解压之后安装,按照官方的教程装的,只装了必要的依赖https://docs.opencv.org/master/d7/d9f/tutorial_linux_install.html

解压,然后执行:

cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..

执行make -j7就出错了,然后看网上说最好不要多线程,make clean之后直接make,出现以下错误1:

In file included from /home/opencv-4.0.1/3rdparty/protobuf/src/google/protobuf/repeated_field.h:62,
                 from /home/opencv-4.0.1/3rdparty/protobuf/src/google/protobuf/extension_set.h:51,
                 from /home/opencv-4.0.1/3rdparty/protobuf/src/google/protobuf/extension_set.cc:38:
/home/opencv-4.0.1/3rdparty/protobuf/src/google/protobuf/message_lite.h:116: error: expected ‘;’ before ‘const’
/home/opencv-4.0.1/3rdparty/protobuf/src/google/protobuf/message_lite.h:120: error: expected ‘;’ before ‘T’
/home/opencv-4.0.1/3rdparty/protobuf/src/google/protobuf/message_lite.h: In function ‘const std::string& google::protobuf::internal::GetEmptyStringAlreadyInited()’:
/home/opencv-4.0.1/3rdparty/protobuf/src/google/protobuf/message_lite.h:139: error: ‘class google::protobuf::internal::ExplicitlyConstructed<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >’ has no member named ‘get’
In file included from /home/opencv-4.0.1/3rdparty/protobuf/src/google/protobuf/extension_set.h:51,
                 from /home/opencv-4.0.1/3rdparty/protobuf/src/google/protobuf/extension_set.cc:38:
/home/opencv-4.0.1/3rdparty/protobuf/src/google/protobuf/repeated_field.h: At global scope:
/home/opencv-4.0.1/3rdparty/protobuf/src/google/protobuf/repeated_field.h:111: error: template declaration of ‘google::protobuf::RepeatedField google::protobuf::final’
/home/opencv-4.0.1/3rdparty/protobuf/src/google/protobuf/repeated_field.h:112: error: expected primary-expression before ‘public’
/home/opencv-4.0.1/3rdparty/protobuf/src/google/protobuf/repeated_field.h:112: error: expected ‘}’ before ‘public’
/home/opencv-4.0.1/3rdparty/protobuf/src/google/protobuf/repeated_field.h:114: error: expected ‘)’ before ‘*’ token
/home/opencv-4.0.1/3rdparty/protobuf/src/google/protobuf/repeated_field.h:115: error: expected unqualified-id before ‘const’
/home/opencv-4.0.1/3rdparty/protobuf/src/google/protobuf/repeated_field.h:115: error: expected ‘)’ before ‘const’
/home/opencv-4.0.1/3rdparty/protobuf/src/google/protobuf/repeated_field.h:117: error: expected ‘)’ before ‘begin’

。。。。

/home/opencv-4.0.1/3rdparty/protobuf/src/google/protobuf/repeated_field.h:2656: error: expected declaration before ‘}’ token
make[2]: *** [3rdparty/protobuf/CMakeFiles/libprotobuf.dir/src/google/protobuf/extension_set.cc.o] Error 1
make[1]: *** [3rdparty/protobuf/CMakeFiles/libprotobuf.dir/all] Error 2
make: *** [all] Error 2

通过make 2> /home/build_output输出错误,一共输出400多行,感觉这一整个文件都遇到了语法错误。

首先排除源文件错误的选项,大概率源文件是不会出错的,

猜想1:C++标准的问题,OpenCV4.01是最新的,官方说在Ubuntu10.04测试通过,而且这是在编译到14%发生的错误,所以大概率不是C++标准的问题。

猜想2:include文件位置不对,之前自己写程序遇到过这种问题,系统中的include的位置不对,但是编译的时候并没有用到系统中的头文件。

猜想3:网上搜索说是protobuf版本不对,不过我反正不用这一部分,所以就重新编译cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local .. 加上-D BUILD_PROTOBUF=OFF -D BUILD_opencv_dnn=OFF试一试,竟然超过了14%,OK,这是编译的一小步,但这是我人生的一大步,进度条继续向前冲啊!

上面这个经历我学到了一个方法:当出错的时候,舍弃掉出错的部分,还没高兴完,到17%的时候又出错了!

错误2:In file included from /home/opencv-4.0.1/build/3rdparty/ade/ade-0.1.1d/sources/ade/include/ade/util/math.hpp:14,
                 from /home/opencv-4.0.1/build/3rdparty/ade/ade-0.1.1d/sources/ade/source/alloc.cpp:16:
/home/opencv-4.0.1/build/3rdparty/ade/ade-0.1.1d/sources/ade/include/ade/util/assert.hpp:27: error: expected unqualified-id before ‘[’ token
/home/opencv-4.0.1/build/3rdparty/ade/ade-0.1.1d/sources/ade/include/ade/util/assert.hpp:29: error: expected unqualified-id before ‘[’ token
/home/opencv-4.0.1/build/3rdparty/ade/ade-0.1.1d/sources/ade/include/ade/util/assert.hpp:86: error: expected unqualified-id before ‘[’ token
In file included from /home/opencv-4.0.1/build/3rdparty/ade/ade-0.1.1d/sources/ade/source/alloc.cpp:16:
/home/opencv-4.0.1/build/3rdparty/ade/ade-0.1.1d/sources/ade/include/ade/util/math.hpp: In function ‘typename std::enable_if<std::is_integral::value, T>::type ade::util::align_size(T, T)’:
/home/opencv-4.0.1/build/3rdparty/ade/ade-0.1.1d/sources/ade/include/ade/util/math.hpp:31: error: ‘constexpr’ was not declared in this scope
/home/opencv-4.0.1/build/3rdparty/ade/ade-0.1.1d/sources/ade/include/ade/util/math.hpp:31: error: expected ‘;’ before ‘bool’
/home/opencv-4.0.1/build/3rdparty/ade/ade-0.1.1d/sources/ade/include/ade/util/math.hpp:31: error: ‘_assert_tmp’ was not declared in this scope
/home/opencv-4.0.1/build/3rdparty/ade/ade-0.1.1d/sources/ade/include/ade/util/math.hpp:32: error: ‘constexpr’ was not declared in this scope
/home/opencv-4.0.1/build/3rdparty/ade/ade-0.1.1d/sources/ade/include/ade/util/math.hpp:32: error: expected ‘;’ before ‘bool’
/home/opencv-4.0.1/build/3rdparty/ade/ade-0.1.1d/sources/ade/include/ade/util/math.hpp:32: error: ‘_assert_tmp’ was not declared in this scope
/home/opencv-4.0.1/build/3rdparty/ade/ade-0.1.1d/sources/ade/include/ade/util/math.hpp:33: error: ‘constexpr’ was not declared in this scope
/home/opencv-4.0.1/build/3rdparty/ade/ade-0.1.1d/sources/ade/include/ade/util/math.hpp:33: error: expected ‘;’ before ‘bool’
/home/opencv-4.0.1/build/3rdparty/ade/ade-0.1.1d/sources/ade/include/ade/util/math.hpp:33: error: ‘_assert_tmp’ was not declared in this scope
/home/opencv-4.0.1/build/3rdparty/ade/ade-0.1.1d/sources/ade/source/alloc.cpp: In function ‘void* ade::aligned_alloc(size_t, size_t)’:
/home/opencv-4.0.1/build/3rdparty/ade/ade-0.1.1d/sources/ade/source/alloc.cpp:24: error: ‘constexpr’ was not declared in this scope
/home/opencv-4.0.1/build/3rdparty/ade/ade-0.1.1d/sources/ade/source/alloc.cpp:24: error: expected ‘;’ before ‘bool’
/home/opencv-4.0.1/build/3rdparty/ade/ade-0.1.1d/sources/ade/source/alloc.cpp:24: error: ‘_assert_tmp’ was not declared in this scope
/home/opencv-4.0.1/build/3rdparty/ade/ade-0.1.1d/sources/ade/source/alloc.cpp:30: error: ‘nullptr’ was not declared in this scope
make[2]: *** [modules/CMakeFiles/ade.dir/__/3rdparty/ade/ade-0.1.1d/sources/ade/source/alloc.cpp.o] Error 1
make[1]: *** [modules/CMakeFiles/ade.dir/all] Error 2
make: *** [all] Error 2

又经过在网上的一番搜索,发现好像是不支持ADE框架,找到一个问题,两个方法:

一、删减这部分,加上WITH_ADE=OFF选项,BUILD_opencv_gapi=OFF is not enough

二、升级gcc版本, 4.6.3 doesn't support [[noreturn]]/etc,而4.8.0可以编译。我的gcc版本是4.4.3

先尝试第一个方法,又得重新编译。命令变为cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local -D BUILD_PROTOBUF=OFF -D BUILD_opencv_dnn=OFF -D WITH_ADE=OFF .. ,成功跳过去了,但是到了20%又出错了,真是心累,以这种进度,看来要出十几个错误了。

错误3:In file included from /home/opencv-4.0.1/modules/core/include/opencv2/core.hpp:52,
                 from /home/opencv-4.0.1/modules/ts/include/opencv2/ts.hpp:10,
                 from /home/opencv-4.0.1/modules/core/test/test_precomp.hpp:7,
                 from /home/opencv-4.0.1/build/modules/core/opencv_test_core_pch_dephelp.cxx:1:
/home/opencv-4.0.1/modules/core/include/opencv2/core/cvdef.h:656:4: error: #error "OpenCV 4.x+ requires enabled C++11 support"

。。。表示省略一大段话

In file included from /home/opencv-4.0.1/modules/ts/include/opencv2/ts/ts_gtest.h:4760,
                 from /home/opencv-4.0.1/modules/ts/include/opencv2/ts.hpp:87,
                 from /home/opencv-4.0.1/modules/core/test/test_precomp.hpp:7,
                 from /home/opencv-4.0.1/build/modules/core/opencv_test_core_pch_dephelp.cxx:1:
/usr/include/c++/4.4/cxxabi.h: In member function ‘void cv::Mat::forEach_impl(const Functor&)’:
/usr/include/c++/4.4/cxxabi.h:45: error: expected unqualified-id before end of line
/usr/include/c++/4.4/cxxabi.h:45: error: expected ‘}’ before end of line
/usr/include/c++/4.4/cxxabi.h: At global scope:
/usr/include/c++/4.4/cxxabi.h:45: error: expected ‘}’ before end of line
/usr/include/c++/4.4/cxxabi.h:45: error: expected declaration before end of line
make[2]: *** [modules/core/CMakeFiles/opencv_test_core_pch_dephelp.dir/opencv_test_core_pch_dephelp.cxx.o] Error 1
make[1]: *** [modules/core/CMakeFiles/opencv_test_core_pch_dephelp.dir/all] Error 2
make: *** [all] Error 2

从这个错误信息中可以得到几条有用的信息,首先最重要的已经加粗了:OpenCV 4.x+要支持C++11标准,这你他喵不早说啊!官网可没说要支持C++11啊,这不是坑人吗?!官网的要求是:

The following steps have been tested for Ubuntu 10.04 but should work with other distros as well.

Required Packages

  • GCC 4.4.x or later
  • CMake 2.8.7 or higher
  • Git
  • GTK+2.x or higher, including headers (libgtk2.0-dev)
  • pkg-config
  • Python 2.6 or later and Numpy 1.5 or later with developer packages (python-dev, python-numpy)
  • ffmpeg or libav development packages: libavcodec-dev, libavformat-dev, libswscale-dev
  • [optional] libtbb2 libtbb-dev
  • [optional] libdc1394 2.x
  • [optional] libjpeg-dev, libpng-dev, libtiff-dev, libjasper-dev, libdc1394-22-dev
  • [optional] CUDA Toolkit 6.5 or higher

The packages can be installed using a terminal and the following commands or by using Synaptic Manager:

[compiler] sudo apt-get install build-essential

[required] sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev

[optional] sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev

表示官网这个界面还挺好看的,然并卵,所以只能被坑喽!

得到的另一条信息就是这一块编译的OpenCV的核心内容,所以不太好跳过,先上网搜一搜吧。

C++ 98标准是第一版,1998年发布;

C++ 03标准第二步,2003年发布;

C++ 11标准第三版,2011年发布;

C++ 14标准第四版,2014年发布,大概就这样。

针对这个错误有两个解决办法:

一:简单粗暴,不安装最新版的4.x,安装OpenCV3.4.0,然后看到:Conclusion : Never use the last version of anything

二:先用“g++ -dM -E -x c++ -std=c++11 /dev/null | grep plus”命令看看支不支持C++11,结果应该类似“#define __cplusplus 201103L”的结果,但是我的是“cclplus:error:unrecognized command line option "-std=c++11”,应该是版本比较老了,但是3.6.3版本是2016年发布的,又查了一下,gcc到4.7版本之后才支持c++11的,来源:https://blog.csdn.net/haluoluo211/article/details/71141093,如果想编译,就在CMake的时候加上-DCMAKE_CXX_FLAGS="-std=c++11"

综合两点,还是决定安装OpenCV 3.4.0了,其实功能是够的,下载3.4.0,解压,cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local -D BUILD_PROTOBUF=OFF -D BUILD_opencv_dnn=OFF -D WITH_ADE=OFF ..,然后make。等待

-----------------------------------------------分割线--------------------------------------------------------------------------------------

噔噔蹬蹬!心累,到了23%出错了,而且中间很多warning: integer constant is too large for ‘long’ type,不管他,然后错误如下:第一类错误:/home/opencv-3.4.0/modules/imgproc/src/resize.cpp: In function ‘void<unnamed>::vlineSet(FT*, ET*, int) [with ET = unsigned char, FT = <unnamed>::ufixedpoint16]’:
/home/opencv-3.4.0/modules/imgproc/src/resize.cpp:568: error: conversion from ‘<unnamed>::ufixedpoint16’ to ‘unsigned char’ is ambiguous
/home/opencv-3.4.0/modules/imgproc/src/fixedpoint.inl.hpp:283: note: candidates are: <unnamed>::ufixedpoint16::operator float() const
/home/opencv-3.4.0/modules/imgproc/src/fixedpoint.inl.hpp:282: note:                 <unnamed>::ufixedpoint16::operator double() const
/home/opencv-3.4.0/modules/imgproc/src/fixedpoint.inl.hpp:281: note:                 <unnamed>::ufixedpoint16::operator ET() const [with ET = unsigned char]

第二类:/home/opencv-3.4.0/modules/imgproc/src/resize.cpp: In function ‘void<unnamed>::resize_bitExact(const uchar*, size_t, int, int, uchar*, size_t, int, int, int, double, double) [with ET = unsigned char, interpolation = <unnamed>::interpolationLinear<unsigned char>]’:
/home/opencv-3.4.0/modules/imgproc/src/resize.cpp:3805:   instantiated from here
/home/opencv-3.4.0/modules/imgproc/src/resize.cpp:746: error: insufficient contextual information to determine type
/home/opencv-3.4.0/modules/imgproc/src/resize.cpp:746: error: insufficient contextual information to determine type
/home/opencv-3.4.0/modules/imgproc/src/resize.cpp:3805:   instantiated from here
/home/opencv-3.4.0/modules/imgproc/src/resize.cpp:747: error: insufficient contextual information to determine type
/home/opencv-3.4.0/modules/imgproc/src/resize.cpp:747: error: insufficient contextual information to determine type
/home/opencv-3.4.0/modules/imgproc/src/resize.cpp:3805:   instantiated from here
/home/opencv-3.4.0/modules/imgproc/src/resize.cpp:748: error: insufficient contextual information to determine type
/home/opencv-3.4.0/modules/imgproc/src/resize.cpp:748: error: insufficient contextual information to determine type
/home/opencv-3.4.0/modules/imgproc/src/resize.cpp:3805:   instantiated from here
/home/opencv-3.4.0/modules/imgproc/src/resize.cpp:749: error: insufficient contextual information to determine type
/home/opencv-3.4.0/modules/imgproc/src/resize.cpp:749: error: insufficient contextual information to determine type
/home/opencv-3.4.0/modules/imgproc/src/resize.cpp:3805:   instantiated from here
/home/opencv-3.4.0/modules/imgproc/src/resize.cpp:750: error: insufficient contextual information to determine type
/home/opencv-3.4.0/modules/imgproc/src/resize.cpp:750: error: insufficient contextual information to determine type

都是一出错一窝一窝的来,反正整吧!搜了一下,感觉是一个很棘手的问题,有两个方法,一个是升级GCC,另一个是改源码,我去,改源码!对于我这种小白来说简直震惊。按照这个链接改的:反正先下下来替换吧,差点手动改!https://github.com/opencv/opencv/pull/11395/files/9166e6052b32b404298e4de0dcec099d580ad666#diff-762ab5a62f10dda9eb71eec0ebe7febc

既然要改,不如直接全部替换吧,反正都是改,说不定还有其他的bug呢,所以直接从GitHub上下载应该是bug比较少的,再重新编译!还下了一个master版本,This branch is 640 commits behind master.看到这句话还是下最新的吧。https://github.com/opencv/opencv/tree/3.4

蓝瘦,又一轮的cmake和make,先回去了,交给上天。又遇到了一个关于opencl的错误,查了一下

OpenCL是一个为异构平台编写程序的框架,此异构平台可由CPUGPU或其他类型的处理器组成。OpenCL由一门用于编写kernels (在OpenCL设备上运行的函数)的语言(基于C99)和一组用于定义并控制平台的API组成。OpenCL提供了基于任务分割和数据分割并行计算机制。OpenCL类似于另外两个开放的工业标准OpenGLOpenAL,这两个标准分别用于三维图形和计算机音频方面。OpenCL扩展了GPU用于图形生成之外的能力。

所以简单粗暴又在CMake加了-D WITH_OPENCL=OFF -D WITH_OPENCL_SVM=OFF -D WITH_OPENCLAMDFFT=OFF -D WITH_OPENCLAMDBLAS=OFF -D WITH_CUDA=OFF

所以这些长篇大论汇成一句话:https://www.cnblogs.com/xylc/p/4201254.html,不通过的模块都关掉

然而到了28%的时候还是出错/home/opencv-3.4.0/modules/imgproc/src/resize.cpp:3805:   instantiated from here
/home/opencv-3.4.0/modules/imgproc/src/resize.cpp:747: error: insufficient contextual information to determine type
/home/opencv-3.4.0/modules/imgproc/src/resize.cpp:747: error: insufficient contextual information to determine type

没办法了,只能装GCC了!Ubuntu10.04有一个大的弊端就是官方已经不维护了,软件源只能选老的软件源

-------------------------------------------------------------------分割线----------------------------------------------------------------

其实我装了OpenCV3.2.0,对不起,我没有办法,最后到98%出错,不过这是最接近成功的一次

Traceback (most recent call last):
  File "/home/opencv-3.2.0/modules/python/python2/..//src2/gen2.py", line 4, in <module>
    import hdr_parser, sys, re, os
  File "/home/opencv-3.2.0/modules/python/src2/hdr_parser.py", line 855
    has_mat = len(list(filter(lambda x: x[0] in {"Mat", "vector_Mat"}, args))) > 0
                                                      ^
SyntaxError: invalid syntax
make[2]: *** [modules/python2/pyopencv_generated_include.h] Error 1
make[1]: *** [modules/python2/CMakeFiles/opencv_python2.dir/all] Error 2
make: *** [all] Error 2

解决方法:加上-D BUILD_opencv_python2=OFF -D BUILD_opencv_python3=OFF,不用的全删掉

最后CMake命令为:

cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local -D BUILD_PROTOBUF=OFF -D BUILD_opencv_dnn=OFF -D WITH_ADE=OFF -D WITH_OPENCL=OFF -D WITH_OPENCL_SVM=OFF -D WITH_OPENCLAMDFFT=OFF -D WITH_OPENCLAMDBLAS=OFF -D BUILD_opencv_python2=OFF -D BUILD_opencv_python3=OFF .. 1> /home/cmake_output

配置环境参考这个:https://blog.csdn.net/cocoaqin/article/details/78163171

然后用这个命令查看版本pkg-config --modversion opencv,结果是3.2.0,撒花

反思一下,其实不用直接在这个老机子上,为什么不在自己电脑上的虚拟机上安装呢?要快的多,而且即使崩了也没关系,想要升级gcc的时候,就想着一条命令能解决所有问题,心里抱着莫名的侥幸,如果这么简单地话,要你做什么!还好悬崖勒马,没有把项目的机子搞崩溃,但是也出了bug,不管遇到什么问题,不充分的准备,得到的结果就不会好,甚至到无法收场的地步,总而言之,多搜索,多查找,多比对,小心尝试,不要抱有侥幸心理,慢慢来,问题会被解决的。

更新-2019-5-27

在虚拟机上又装了一遍,没办法,摄像头打开失败,然后想在虚拟机上安装一下,结果竟然出错了,然后发现build文件都不一样,pcb上面的是:

--   Video I/O:
--     DC1394 1.x:                  NO
--     DC1394 2.x:                  YES (ver 2.1.2)
--     FFMPEG:                      NO
--       avcodec:                   YES (ver 54.59.100)
--       avformat:                  YES (ver 54.29.104)
--       avutil:                    YES (ver 51.73.101)
--       swscale:                   YES (ver 2.1.101)
--       avresample:                NO
--     GStreamer:                   NO
--     OpenNI:                      NO

而虚拟机上面的是:

--   Video I/O:
--     DC1394 1.x:                  NO
--     DC1394 2.x:                  YES (ver 2.1.2)
--     FFMPEG:                      YES
--       avcodec:                   YES (ver 52.20.1)
--       avformat:                  YES (ver 52.31.0)
--       avutil:                    YES (ver 49.15.0)
--       swscale:                   YES (ver 0.7.1)
--       avresample:                NO
--     GStreamer:                   
--       base:                      YES (ver 0.10.28)
--       video:                     YES (ver 0.10.28)
--       app:                       YES (ver 0.10.28)
--       riff:                      YES (ver 0.10.28)
--       pbutils:                   YES (ver 0.10.28)
--     OpenNI:                      NO
--     OpenNI PrimeSensor Modules:  NO

可以看到是不一样的,所以我猜测,pcb上面的打开失败因为没有用到FFMPEG,然后在虚拟机上编译OpenCV3.2遇到一下错误:

In file included from /root/opencv3.2/opencv-3.2.0/modules/videoio/src/cap_ffmpeg.cpp:47:
/root/opencv3.2/opencv-3.2.0/modules/videoio/src/cap_ffmpeg_impl.hpp: In member function ‘bool CvCapture_FFMPEG::grabFrame()’:
/root/opencv3.2/opencv-3.2.0/modules/videoio/src/cap_ffmpeg_impl.hpp:934: error: ‘struct AVFrame’ has no member named ‘pkt_pts’
/root/opencv3.2/opencv-3.2.0/modules/videoio/src/cap_ffmpeg_impl.hpp:934: error: ‘struct AVFrame’ has no member named ‘pkt_pts’
/root/opencv3.2/opencv-3.2.0/modules/videoio/src/cap_ffmpeg_impl.hpp:934: error: ‘struct AVFrame’ has no member named ‘pkt_pts’
/root/opencv3.2/opencv-3.2.0/modules/videoio/src/cap_ffmpeg_impl.hpp:934: error: ‘struct AVFrame’ has no member named ‘pkt_dts’
In file included from /root/opencv3.2/opencv-3.2.0/modules/videoio/src/cap_ffmpeg.cpp:47:
/root/opencv3.2/opencv-3.2.0/modules/videoio/src/cap_ffmpeg_impl.hpp: In member function ‘bool CvCapture_FFMPEG::retrieveFrame(int, unsigned char**, int*, int*, int*, int*)’:
/root/opencv3.2/opencv-3.2.0/modules/videoio/src/cap_ffmpeg_impl.hpp:999: error: ‘avcodec_align_dimensions2’ was not declared in this scope
/root/opencv3.2/opencv-3.2.0/modules/videoio/src/cap_ffmpeg_impl.hpp: In function ‘AVFrame* icv_alloc_picture_FFMPEG(int, int, int, bool)’:
/root/opencv3.2/opencv-3.2.0/modules/videoio/src/cap_ffmpeg_impl.hpp:1389: error: ‘struct AVFrame’ has no member named ‘format’
/root/opencv3.2/opencv-3.2.0/modules/videoio/src/cap_ffmpeg_impl.hpp:1390: error: ‘struct AVFrame’ has no member named ‘width’
/root/opencv3.2/opencv-3.2.0/modules/videoio/src/cap_ffmpeg_impl.hpp:1391: error: ‘struct AVFrame’ has no member named ‘height’
/root/opencv3.2/opencv-3.2.0/modules/videoio/src/cap_ffmpeg_impl.hpp: In member function ‘void CvVideoWriter_FFMPEG::close()’:
/root/opencv3.2/opencv-3.2.0/modules/videoio/src/cap_ffmpeg_impl.hpp:1803: error: ‘avformat_free_context’ was not declared in this scope
make[2]: *** [modules/videoio/CMakeFiles/opencv_videoio.dir/src/cap_ffmpeg.cpp.o] Error 1
make[1]: *** [modules/videoio/CMakeFiles/opencv_videoio.dir/all] Error 2
make: *** [all] Error 2

搜索之后发现答案少的可怜,怎么办,好难过,网上说法是OpenCV和FFMpeg没有很好地兼容,要改cap_ffmpeg_impl.hpp的源码,我何德何能啊!

https://www.baidu.com/link?url=eyVYVWL2wfMrawKJauFhcsuneLpg1frOPn3lLs5VBte9tYkTrEq4f8azclD8Toupms954CE78CatgNKHm4VjxQOyoE7AlZBXT8xXKPRGV3b5Dxk6_a5_JFABMYVMRbZwcfdoW1yOC1H999MaNplHL5Qq6inDBPRAzzqiSzQyM3c9geMWq-auZ3f3xAiRZ9Z-&wd=&eqid=94227cfa00001edb000000035cee3db9

竟然在百度上找到了类似的错误,震惊,一剂强心剂,然后我试着重新安装FFmpeg,重新编译试试,如果不行就加上-D WITH_FFMPEG=OFF选项吧,这是选项的意思所在的文档:OpenCV配置选项官方介绍文档https://docs.opencv.org/3.2.0/d6/d15/tutorial_building_tegra_cuda.html

重新CMake,然而输出文档好像一样,僵硬!,错误完全一样,尝试关掉FFmpeg。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值