在使用OpenCV过程中遇到了很多问题,在这里记录一下:
1、找不到libwebp.so.5:
这是由于有些版本的OpenCV还需要老版本的libwebp.so.5,而新版本的ubuntu已经更新为libwebp.so.6
最简单粗暴的方法是在相应的文件夹中(我的是放在/usr/lib/x86_64-linux-gnu)创建一个libwebp.so.5文件,把他软链接到libwebp.so.6上就可以了。
参考:https://stackoverflow.com/questions/34559185/opencv-build-error-libwebp-so-not-found
2、找不到libpng12.so.0:
这个问题的原因是libpng12在ubuntu18及以上的版本中,已经更新为libpng16
可以下载libpng12.so.0的文件,把他放在/usr/lib/x86_64-linux-gnu文件夹中。
资源已下载至https://download.csdn.net/download/weixin_43242765/32623842,解压即可使用。
参考:https://www.linuxuprising.com/2018/05/fix-libpng12-0-missing-in-ubuntu-1804.html
3、opencv多版本并存使用方式
由于ros中也存在opencv,在使用opencv时可能会出现冲突,另外在使用其他版本的opencv时也会出现版本的问题,如果在安装oipencv的时候直接make install,那么opencv就会安装的到处都是,非常难以清理,今后如果有更换版本的需求就会变得很麻烦,容易删不干净。
因此在使用opencv时,可以把编译完成的opencv放在目录中,使用时在CMakeLists.txt中从这个路径中找opencv就可以了。
cmake使用find_package的过程就是从目录中找.cmake的过程,在opencv中,这个文件被放在了build文件夹下(OpenCVConfig.cmake),找到之后就能够获得对应库的位置,因此可以编写如下CMakeList.txt示例:
set(OpenCV_DIR "/usr/local/opencv-4.3.0/build")
find_package(OpenCV 4.3.0 REQUIRED)
message(STATUS "OpenCV version: ${OpenCV_VERSION}" )
set(OpenCV_INCLUDE_DIRS "/usr/local/opencv-4.3.0/include/opencv2")
message(STATUS "OpenCV include path: ${OpenCV_INCLUDE_DIRS}")
message(STATUS "OpenCV_LIBRARIES is: ${OpenCV_LIBRARIES}")
set(OpenCV_LIB_DIR "/usr/local/opencv-4.3.0/lib")
4、error: invalid use of incomplete type
在使用某个已经实现的类时,如果只是定义某个类的指针,可以使用class关键字先进行声明,而不需包含头文件。
但如果涉及到定义某个类的对象或是引用类的某个具体成员时,则必须包含类的头文件,并且不要加class关键字进行声明。否则就会出现上述错误。