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

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")
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值