opencv编译失败,采用ros自带opencv版本搭建开发环境

    技术2022-07-21  68

    opencv库编译无法通过 系统Ubuntu16.04 + ROS 由于ros自带opencv,为简化操作直接采用该自带的openc环境进行学习和开发。

    1.环境变量设置

    bash设置

    sudo gedit /etc/bash.bashrc

    在最后一行添加ros中opencv路径

    PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/opt/ros/kinetic/lib/x86_64-linux-gnu/pkgconfig export PKG_CONFIG_PATH

    添加ros中opencv库文件路径

    sudo gedit /etc/ld.so.conf.d/opencv.conf

    打开了一个空白文件,插入下面的路径:

    /opt/ros/kinetic/lib/x86_64-linux-gnu/

    2.试采用QT搭建环境

    首先创建QT console工程 更改*.pro文件

    QT += core QT -= gui TARGET = my_code CONFIG += console CONFIG -= app_bundle CONFIG += c++11 console DEFINES += QT_DEPRECATED_WARNINGS INCLUDEPATH += /opt/ros/kinetic/include/opencv-3.3.1-dev/opencv \ /opt/ros/kinetic/include/opencv-3.3.1-dev/opencv2 \ /opt/ros/kinetic/include \ /opt/ros/kinetic/include/opencv-3.3.1-dev LIBS += /opt/ros/kinetic/lib/x86_64-linux-gnu/libopencv* TEMPLATE = app SOURCES += main.cpp

    源文件如下:

    #include <opencv2/highgui.hpp> #include <opencv2/core.hpp> #include <opencv2/opencv.hpp> #include <iostream> using namespace std; void onMouse(int event, int x, int y, int flags, void* param); main() { cv::Mat image; image = cv::imread("/home/ray/Code/OpenCV3book/src/images/girl.jpg" , cv::IMREAD_COLOR ); if(image.empty()) { cout << "读取失败" << endl; } cv::circle(image, cv::Point(image.cols/ 2, image.rows / 2), 100, cv::Scalar(0,255,0), 3); cv::Mat image2(image); cv::namedWindow("Image"); cv::namedWindow("Image2"); cv::imshow("Image", image); cv::waitKey(0); cv::imshow("Image2", image2); cv::waitKey(0); return 0;

    发现涉及到图片输出显示就会报错

    网上搜索了一下解决方案,可能是QT版本问题。由于QT还用作PX4环境,选择其他IDE,这里选择了VScode

    3.VScode搭建环境

    这里就简单多了

    更改 c_cpp_properties.json 文件如下

    { "configurations": [ { "name": "Linux", "includePath": [ "${workspaceFolder}/**", "/opt/ros/kinetic/include/opencv-3.3.1-dev/opencv", "/opt/ros/kinetic/include/opencv-3.3.1-dev/opencv2", "/opt/ros/kinetic/include", "/opt/ros/kinetic/include/opencv-3.3.1-dev" ], "defines": [], "compilerPath": "/opt/gcc-arm-none-eabi-7-2017-q4-major/bin/arm-none-eabi-gcc", "cStandard": "gnu11", "cppStandard": "gnu++20", "intelliSenseMode": "clang-x64", "configurationProvider": "ms-vscode.cmake-tools", "compilerArgs": [ "-std=c++11", "-std=gnu++11" ] } ], "version": 4 }

    或者按照图片设置

    源码:

    #include <opencv2/highgui.hpp> #include <opencv2/core.hpp> #include <opencv2/opencv.hpp> #include <iostream> using namespace std; void onMouse(int event, int x, int y, int flags, void* param); main() { cv::Mat image; image = cv::imread("/home/ray/Code/OpenCV3book/src/images/girl.jpg" , cv::IMREAD_COLOR ); if(image.empty()) { cout << "读取失败" << endl; } cv::circle(image, cv::Point(image.cols/ 2, image.rows / 2), 100, cv::Scalar(0,255,0), 3); cv::Mat image2(image); cv::namedWindow("Image"); cv::namedWindow("Image2"); cv::imshow("Image", image); cv::waitKey(0); cv::imshow("Image2", image2); cv::waitKey(0); return 0; }

    CMakeLists.txt文件

    # cmake for OpenCV Cookbook 3rd edition chapter 01 # your opencv/build directory should be in your system PATH # set minimum required version for cmake cmake_minimum_required(VERSION 2.8) find_package(OpenCV REQUIRED) # add executable add_executable( loadDisplaySave loadDisplaySave.cpp) add_executable( logo logo.cpp) add_executable( mat mat.cpp) # link libraries target_link_libraries( loadDisplaySave ${OpenCV_LIBS}) target_link_libraries( logo ${OpenCV_LIBS}) target_link_libraries( mat ${OpenCV_LIBS}) # copy required images to every directory with executable SET (IMAGES ${CMAKE_SOURCE_DIR}/images/puppy.bmp ${CMAKE_SOURCE_DIR}/images/smalllogo.png) FILE(COPY ${IMAGES} DESTINATION .) FILE(COPY ${IMAGES} DESTINATION "Debug") FILE(COPY ${IMAGES} DESTINATION "Release")

    OK,在vscode下直接编译运行: 结果

    环境搭建成功

    ps:当用到c++11时,要在CMakeLists.txt中添加

    SET( CMAKE_CXX_FLAGS "-std=c++11 -O3")
    Processed: 0.008, SQL: 10