高翔博士SLAM十四讲ch5--opencv部分

项目场景:

高翔博士十四讲opencv部分问题总结

问题1描述:

首先是下载opencv的版本,先开始我的电脑上是2.4.9.1的版本,搜索了很多文章如何去卸载opencv,都说需要重新进入build文件夹然后再uninstall

解决方案:

去网上下载了opencv2.4.9,进入build,开始编译,但是在编译那步出现了问题,根本没法install,所以网上所说的uninstall也没用。。。
于是我直接按网上卸载python-opencv的方法卸载了opencv,就不管build文件夹这部分的uninstall了,直接按这个步骤走就可,然后查看opencv版本就没有版本号了
相关链接

问题2描述:

接下来正常安装3.4的版本opencv即可,没有问题,检测安装成功!!
但是运行高博士的代码还是不行,首先是报错

error: #error This file requires compiler and library support for the ISO C++ 2011 standard.

解决方案:

有很多方法,但是运行了都没用,经过尝试,发现有个可以成功
链接在这,感谢大佬!

问题3描述:

把cmakelists改了又出现问题

CMakeFiles/imageBasics.dir/imageBasics.cpp.o:在函数‘cv::String::String(char const*)’中:
imageBasics.cpp:(.text._ZN2cv6StringC2EPKc[_ZN2cv6StringC5EPKc]+0x3f):对‘cv::String::allocate(unsigned long)’未定义的引用
CMakeFiles/imageBasics.dir/imageBasics.cpp.o:在函数‘cv::Mat::~Mat()’中:
imageBasics.cpp:(.text._ZN2cv3MatD2Ev[_ZN2cv3MatD5Ev]+0x15):对‘cv::Mat::deallocate()’未定义的引用
imageBasics.cpp:(.text._ZN2cv3MatD2Ev[_ZN2cv3MatD5Ev]+0x71):对‘cv::fastFree(void*)’未定义的引用
CMakeFiles/imageBasics.dir/imageBasics.cpp.o:在函数‘main’中:
imageBasics.cpp:(.text.startup+0xbc):对‘cv::imread(cv::String const&, int)’未定义的引用
imageBasics.cpp:(.text.startup+0x153):对‘cv::fastFree(void*)’未定义的引用
imageBasics.cpp:(.text.startup+0x1da):对‘cv::String::deallocate()’未定义的引用
imageBasics.cpp:(.text.startup+0x29f):对‘cv::imshow(cv::String const&, cv::_InputArray const&)’未定义的引用
imageBasics.cpp:(.text.startup+0x2a7):对‘cv::String::deallocate()’未定义的引用
imageBasics.cpp:(.text.startup+0x2ae):对‘cv::waitKey(int)’未定义的引用
imageBasics.cpp:(.text.startup+0x3fc):对‘cv::noArray()’未定义的引用
imageBasics.cpp:(.text.startup+0x451):对‘cv::Mat::Mat(cv::Mat const&, cv::Rect_<int> const&)’未定义的引用
imageBasics.cpp:(.text.startup+0x466):对‘cv::Mat::setTo(cv::_InputArray const&, cv::_InputArray const&)’未定义的引用
imageBasics.cpp:(.text.startup+0x4ae):对‘cv::imshow(cv::String const&, cv::_InputArray const&)’未定义的引用
imageBasics.cpp:(.text.startup+0x4b8):对‘cv::String::deallocate()’未定义的引用
imageBasics.cpp:(.text.startup+0x4bf):对‘cv::waitKey(int)’未定义的引用
imageBasics.cpp:(.text.startup+0x56d):对‘cv::Mat::copyTo(cv::_OutputArray const&) const’未定义的引用
imageBasics.cpp:(.text.startup+0x572):对‘cv::noArray()’未定义的引用
imageBasics.cpp:(.text.startup+0x5c2):对‘cv::Mat::Mat(cv::Mat const&, cv::Rect_<int> const&)’未定义的引用
imageBasics.cpp:(.text.startup+0x5d7):对‘cv::Mat::setTo(cv::_InputArray const&, cv::_InputArray const&)’未定义的引用
imageBasics.cpp:(.text.startup+0x61b):对‘cv::imshow(cv::String const&, cv::_InputArray const&)’未定义的引用
imageBasics.cpp:(.text.startup+0x623):对‘cv::String::deallocate()’未定义的引用
imageBasics.cpp:(.text.startup+0x65e):对‘cv::imshow(cv::String const&, cv::_InputArray const&)’未定义的引用
imageBasics.cpp:(.text.startup+0x668):对‘cv::String::deallocate()’未定义的引用
imageBasics.cpp:(.text.startup+0x66f):对‘cv::waitKey(int)’未定义的引用
imageBasics.cpp:(.text.startup+0x674):对‘cv::destroyAllWindows()’未定义的引用
imageBasics.cpp:(.text.startup+0x6ee):对‘cv::Mat::copySize(cv::Mat const&)’未定义的引用
imageBasics.cpp:(.text.startup+0x6fb):对‘cv::Mat::deallocate()’未定义的引用
imageBasics.cpp:(.text.startup+0x754):对‘cv::String::deallocate()’未定义的引用
imageBasics.cpp:(.text.startup+0x787):对‘cv::String::deallocate()’未定义的引用
imageBasics.cpp:(.text.startup+0x796):对‘cv::String::deallocate()’未定义的引用
imageBasics.cpp:(.text.startup+0x7d8):对‘cv::String::deallocate()’未定义的引用
imageBasics.cpp:(.text.startup+0x804):对‘cv::String::deallocate()’未定义的引用
collect2: error: ld returned 1 exit status
CMakeFiles/imageBasics.dir/build.make:102: recipe for target 'imageBasics' failed
make[2]: *** [imageBasics] Error 1
CMakeFiles/Makefile2:94: recipe for target 'CMakeFiles/imageBasics.dir/all' failed
make[1]: *** [CMakeFiles/imageBasics.dir/all] Error 2
Makefile:102: recipe for target 'all' failed
make: *** [all] Error 2

解决方案:

可以看出所有cv都报错,这可怎么办。。。找到了官方的安装包里面的sample实例,进行代码对比,发现他多了几句话
修改cmakelists为:

cmake_minimum_required(VERSION 2.8)

project(imageBasics)

find_package(OpenCV REQUIRED)

message(STATUS "OpenCV library status:")
message(STATUS "    version: ${OpenCV_VERSION}")
message(STATUS "    libraries: ${OpenCV_LIBS}")
message(STATUS "    include path: ${OpenCV_INCLUDE_DIRS}")

if(CMAKE_VERSION VERSION_LESS "2.8.11")
  # Add OpenCV headers location to your include paths
  include_directories(${OpenCV_INCLUDE_DIRS})
endif()

#SET(CMAKE_CXX_FLAGS "-std=c++0x")
SET( CMAKE_CXX_FLAGS "-std=c++11 -O3")
add_executable(imageBasics imageBasics.cpp)
# 链接OpenCV库
target_link_libraries(imageBasics ${OpenCV_LIBS})

#add_executable(undistortImage undistortImage.cpp)
# 链接OpenCV库
#target_link_libraries(undistortImage ${OpenCV_LIBS})


多了很多句话,但是经过我的尝试,我发现最重要的就是

find_package(OpenCV REQUIRED)

只要有这句话就可以成功运行啦!!!!!

网上还说需要增加一个makefile并不是必要的!!!!

运行!:

编译成功后就可以运行啦!
要自己选择图片,需要到图片所在的上一层目录,然后输入

 build/imageBasics ubuntu.png

成功输出!!!折磨了我好几天的opencv和代码运行终于成功啦,牢记两条重要的指令!!!


版权声明:本文为Laney_Midory原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。