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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ROS中使用OpenCV摄像头可以通过以下步骤实现: 1. 安装ros-opencv包:在终端中执行以下命令 ``` sudo apt-get install ros-<distro>-opencv ``` 其中`<distro>`是你正在使用的ROS发行版的名称,例如`melodic`或`noetic`。 2. 创建ROS包并添加依赖项:在终端中执行以下命令 ``` cd ~/catkin_ws/src catkin_create_pkg opencv_camera rospy cv_bridge image_transport ``` 这将在`catkin_ws/src`目录下创建名为`opencv_camera`的新ROS包,并为其添加依赖项。 3. 编写ROS节点:打开一个新的终端窗口,输入以下命令,创建一个名为`camera_node.py`的Python脚本文件,并将其放入`opencv_camera/src`文件夹中。 ``` cd ~/catkin_ws/src/opencv_camera/src touch camera_node.py chmod +x camera_node.py ``` 然后使用你喜欢的文本编辑器打开`camera_node.py`文件,并将以下代码粘贴到文件中: ```python #!/usr/bin/env python import rospy import cv2 from sensor_msgs.msg import Image from cv_bridge import CvBridge, CvBridgeError bridge = CvBridge() def publish_camera(): rospy.init_node('camera_node', anonymous=True) pub = rospy.Publisher('camera/image_raw', Image, queue_size=10) cap = cv2.VideoCapture(0) rate = rospy.Rate(30) # 30 Hz while not rospy.is_shutdown(): ret, frame = cap.read() if not ret: break try: pub.publish(bridge.cv2_to_imgmsg(frame, "bgr8")) except CvBridgeError as e: print(e) rate.sleep() cap.release() if __name__ == '__main__': try: publish_camera() except rospy.ROSInterruptException: pass ``` 该节点将打开计算机上的默认摄像头,并将每个帧发布到`/camera/image_raw`主题中。 4. 编译ROS包:在终端中执行以下命令 ``` cd ~/catkin_ws catkin_make ``` 这将编译`opencv_camera`包。 5. 运行ROS节点:在终端中输入以下命令 ``` rosrun opencv_camera camera_node.py ``` 这将启动ROS节点并开始发布摄像头图像。 6. 查看摄像头图像:打开一个新的终端窗口,输入以下命令 ``` rosrun image_view image_view image:=/camera/image_raw ``` 这将打开一个图像查看器,其中将显示从摄像头发布的图像。 现在,你已经成功地将OpenCV摄像头集成到ROS中,并且可以在其他ROS节点中使用该摄像头。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值