在 Ubuntu 18.04 Jetson 中为 cv_bridge 链接 opencv 3.2

Linking opencv 3.2 for cv_bridge in Ubuntu 18.04 Jetson

我需要使用 cv_bridge 并将图像传输到 vison wx。我正在使用 makefile 来 link / 编译。我遇到的问题是我不知道 opencv 3.2 库的头文件在哪里。这是在 Jetson Xavier 上,opencv 3.2 可能已经被 SDK Manager 安装了,也可能是我后来安装的。无论如何,我现在使用命令

重新安装了它
sudo apt-get install --reinstall libopencv-core3.2

为了识别编译器和 linker 标志,我 运行 两个 pkg-config 命令

pkg-config --cflags cv_bridge

-I/opt/ros/melodic/include -I/usr/include/opencv -I/opt/ros/melodic/include

pkg-config --libs cv_bridge 

-L/opt/ros/melodic/lib -lcv_bridge /usr/lib/aarch64-linux-gnu/libopencv_core.so.3.2.0 /usr/lib/aarch64-linux-gnu/libopencv_imgproc.so.3.2.0 /usr/lib/aarch64-linux-gnu/libopencv_imgcodecs.so.3.2.0 -lrosconsole -lrosconsole_log4cxx -lrosconsole_backend_interface /usr/lib/aarch64-linux-gnu/liblog4cxx.so /usr/lib/aarch64-linux-gnu/libboost_regex.so /usr/lib/aarch64-linux-gnu/libboost_system.so /usr/lib/aarch64-linux-gnu/libboost_thread.so /usr/lib/aarch64-linux-gnu/libboost_chrono.so /usr/lib/aarch64-linux-gnu/libboost_date_time.so /usr/lib/aarch64-linux-gnu/libboost_atomic.so /usr/lib/aarch64-linux-gnu/libpthread.so -lroscpp_serialization -lrostime /usr/lib/aarch64-linux-gnu/libboost_date_time.so /usr/lib/aarch64-linux-gnu/libboost_system.so /usr/lib/aarch64-linux-gnu/libboost_thread.so /usr/lib/aarch64-linux-gnu/libboost_chrono.so /usr/lib/aarch64-linux-gnu/libboost_atomic.so /usr/lib/aarch64-linux-gnu/libpthread.so -lcpp_common /usr/lib/aarch64-linux-gnu/libboost_system.so /usr/lib/aarch64-linux-gnu/libboost_thread.so /usr/lib/aarch64-linux-gnu/libboost_chrono.so /usr/lib/aarch64-linux-gnu/libboost_date_time.so /usr/lib/aarch64-linux-gnu/libboost_atomic.so /usr/lib/aarch64-linux-gnu/libpthread.so /usr/lib/aarch64-linux-gnu/libconsole_bridge.so.0.4

从上面的输出来看,在

处有一个opencv核心库
ls /usr/lib/aarch64-linux-gnu/libopencv_core.so.3.2.0

/usr/lib/aarch64-linux-gnu/libopencv_core.so.3.2.0

问题是我找不到 opencv 3.2 的头文件。从上面的输出来看,头文件应该在目录

-I/usr/include/opencv

在目录/usr/include/opencv中,有一个子目录

/usr/include/opencv4/opencv2_orig/core/version.hpp

并且包含 version.hpp 文件,其中包含显示版本为 4.1.1 的这些行。

file: /usr/include/opencv4/opencv2_orig/core/version.hpp

#define CV_VERSION_MAJOR    4
#define CV_VERSION_MINOR    1
#define CV_VERSION_REVISION 1

那么,如何安装与 cv_bridge 一起使用的 opencv 3.2 版的头文件?此外,这个问题可能有一个 ROS 包解决方案,这可能更合适,因为 cv_bridge 库位于 /opt/ros/melodic/lib.

嗯,我看到没有 cv-bridge 的标签。我认为这意味着我进错了博客。我应该 post 这个问题有什么建议吗?

Opencv 3.2可以使用下面的命令安装,header个文件放在/usr/include/opencv2中。我相信发生的事情是安装了 opencv4,然后删除了 opencv 3.2 的 header 文件。

sudo apt install libopencv-dev=3.2.0+dfsg-4ubuntu0.1

这里是将cpp代码step_2与rosbag、cv_bridge和opencv(3.2)链接起来的例子。 include -I/opt/ros/melodic/include 不是必需的,它是由 rosbag pkg-config 命令生成的,但为了清楚起见包含在内,以识别 cv_bridge header.[=13= 的位置]

g++ step_2.cpp -o step_2  `pkg-config --cflags --libs rosbag` \
    -I/opt/ros/melodic/include \
    -L/usr/lib/aarch64-linux-gnu/ -lopencv_core -lopencv_highgui \
    -L/opt/ros/melodic/lib -lcv_bridge

ref ros perception