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

Laney_Midory發表於2020-12-06

專案場景:

高翔博士十四講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和程式碼執行終於成功啦,牢記兩條重要的指令!!!

相關文章