在Ubuntu10.04上安装OpenCV3.2.0(OpenCV4.01.3.4等失败)问题及心路历程记录_/pyopencv_gapi.hpp:1013:69: error: ‘pyopencv_gopaq-程序员宅基地

因为项目的原因,需要在一个很老的机子上安装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。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_40979989/article/details/89460097

智能推荐

com.alibaba.dubbo.remoting.TimeoutException: Waiting server-side response timeout by scan timer.-程序员宅基地

文章浏览阅读1.1w次,点赞6次,收藏3次。com.alibaba.dubbo.remoting.TimeoutException: Waiting server-side response timeout by scan timer.超时异常:等待服务响应超时。出现这个问题的分析:1,jar包依赖问题,没有成功引入依赖。2,服务提供方打了断点,导致代码执行堵塞,响应超时。3,服务端后台代码报错导致服务没有被成功调用(..._com.alibaba.dubbo.remoting.timeoutexception: waiting server-side response ti

利用Gh0st 3.6远程溢出漏洞反向控制攻击者_gh0st漏洞-程序员宅基地

文章浏览阅读883次。title: 利用Gh0st 3.6远程溢出漏洞反向控制攻击者comments: truetoc: truecategories:[Metasploit][Exp]tags:MetasploitOverflowGh0stdate: 2020-01-12 18:30:10abbrlink: 30568前言漏洞验证在2017年被公开,实际上Gh0st溢出漏洞在2009..._gh0st漏洞

EffectiveC++-条款25:考虑写出一个不抛异常的 swap 函数_effective c++ 条款25-程序员宅基地

文章浏览阅读206次。## 一. 内容1. swap 是一个有趣的函数。原本它只是STL的一部分,后面成为异常安全性编程的重要支柱(见条款29),以及处理自我赋值的常见机制(见条款11)。swap如此有用,考虑其合理的实现变得十分重要。2. 所谓 swap(置换),就是将两个对象的值彼此赋值给对方。3. 默认情况下,swap 可以交给 标准程序库提供的 swap 算法完成,其典型实现正如预期。 ```cpp namespace std{ template void swap(............_effective c++ 条款25

脚本和zabbix监控_不依赖zabbix,脚本监控-程序员宅基地

文章浏览阅读2.5k次,点赞3次,收藏9次。1 .LNMP环境一键安装脚本1.1 要求可编译也可yum安装,最终显示phpinfo信息:修改nginx默认端口为8000修改nginx的连接数为10240修改nginx的默认首页启动每个服务前,需要先检测服务是否存在1.2 脚本内容如下:#!/bin/bashnginx_install() { if [ -f /root/nginx-1.18.0.tar.gz ];then echo "nginx源码包存在,开始解压..." cd /root_不依赖zabbix,脚本监控

MybatisPlus实现多数据源_mybatis plus多数据源 @primary-程序员宅基地

文章浏览阅读2.2k次。关于mybatisPlus多数据源的一点小小的记录_mybatis plus多数据源 @primary

腾讯云颜松柏:详解DevOps成熟度模型与效能度量-程序员宅基地

文章浏览阅读2.6k次,点赞2次,收藏17次。成熟度模型是一次性评估,效能度量是持续、定期的度量_devops成熟度模型

随便推点

【C语言】枚举(enum)_c语言枚举-程序员宅基地

文章浏览阅读2.4k次,点赞4次,收藏21次。一、枚举语法的定义枚举(enum)是一种数据类型,它的语法定义格式为:enum枚举名{枚举元素1,枚举元素2,......};例如,一个星期有七天,使用枚举法进行定义为:enum Day{ Mon,Tue,Wed,Thu,Fri,Sat,Sun};需要注意的是,第一个枚举元素的默认值为0,后面的枚举元素的值在上一枚举元素的值上加1。因此,Mon=0,Tue=1,Wed=2,Thu=3,Fri=4,Sat=5,Sun=6.但是,在定义枚举类型时,可以改..._c语言枚举

2023 年江西省职业院校技能大赛 智能制造设备技术应用赛项任务书——学生赛样题_机器人拾取吸盘工具到物料区拾取物料并判断将合格品放到原料区不合格品放到回-程序员宅基地

文章浏览阅读982次,点赞20次,收藏21次。产品所在工位推动气缸缩回,缩回到位后升降气缸下降,下降到 位后检测LED灯闪烁,4s后,升降气缸上升,上升到位后推动气缸伸出,结果指示灯点亮(当检测结果为优良品时,绿灯常亮,当检测结果为废品时,红灯常亮,当检测为合格品时,红色和绿色指示灯交替闪烁)。1.程序正常运行过程中,若触发安全光栅,工业机器人速度降至当前速度的50%,降速超过6s,工业机器人停止运行。完成后,机器人回到安全点,暂停。4.按下 “开始”按钮,根据初次检测结果完成产品的入库工作,优良品的产品放入成品区,完成后机器人放下工具,回安全点。_机器人拾取吸盘工具到物料区拾取物料并判断将合格品放到原料区不合格品放到回

时间序列数据库KDB 与Java结合使用介绍 -- 3 基于KDB JDBC的写入实现_kdb支持sql吗-程序员宅基地

文章浏览阅读1.6k次。时间序列数据库KDB 与Java结合使用介绍 -- 3 基于KDB JDBC的写入实现_kdb支持sql吗

rgb颜色处理_rgb处理-程序员宅基地

这篇文章讲述了RGB颜色处理的方法,包括使用numpy和matplotlib库来处理图像,使用LAB色彩空间进行处理。

一、C++内存分区模型_c++的内存分区模型-程序员宅基地

文章浏览阅读129次。C++内存分区模型文章目录C++内存分区模型前言一、代码区和全局区1、代码区2、全局区二、栈区和堆区1.栈区2.堆区三、new操作符总结前言C++程序在执行时,将内存大方向相划分为4个区域:代码区:存放函数体的二进制代码,有操作系统进行管理全局区:存放全局变量和静态变量以及常量栈区: 由编译器自动分配和释放,存放函数的参数值,局部变量等堆区: 由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收内存四区的意义: 不同区域存放的数据,赋予不同的生命周期,给我们更大的灵活_c++的内存分区模型

配置apache,直接访问服务器不显示文件目录_使用localhost进行浏览,显示apache网页,不显示文件目录-程序员宅基地

文章浏览阅读7.7k次。缺省情况下如果你的测试环境下在浏览器输入地址:http://localhost/如果你的文件根目录里有 index.html,index.php,浏览器就会显示 index.html的内容,如果没有 index.html,浏览器就会显示文件根目录的目录列表,目录列表包括文件根目录下的文件和子目录。同样你输入一个虚拟目录的地址:http://localhost/b/如_使用localhost进行浏览,显示apache网页,不显示文件目录

推荐文章

热门文章

相关标签