项目场景:
高翔博士十四讲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版权协议,转载请附上原文出处链接和本声明。