ROS2中OPENCV的使用步骤

1、首先看自己的ros2是否安装了opencv

打开终端运行,即可得到自己的opencv版本

pkg-config --modversion opencv4

2、将opencv和ros2集成

2.1、创建工作环境

mkdir -p ~/OPENCV_WS/scr

2.2、创建ros2包的时候,添加opencv依赖项

ros2 pkg create opencv_use --build-type ament_cmake --dependencies rclcpp OpenCV sensor_msgs cv_bridge image_transport --node-name my_opencv

3、编写.cpp代码读取图片,完成第一个opencv实例

#include

#include

/*

通过使用 using namespace cv;

你可以方便地访问 cv 命名空间中的所有函数、类、变量等,而不必在每个使用之前添加 cv:: 限定符。这可以使代码更加简洁,

*/

using namespace cv;

int main(int argc, char ** argv)

{

(void) argc;

(void) argv;

Mat scr = imread("/home/dzj/桌面/Opencv/图片/Lenna.png");

imshow("scr", scr);

waitKey(0); // 这句确保窗口一直打开

printf("hello world opencv_use package\n");

return 0;

}

4、配置CMakeList.txt

这里在创建包的时候增加了–node-name 因此不需要自己添加依赖项

# find dependencies

find_package(ament_cmake REQUIRED)

find_package(rclcpp REQUIRED)

find_package(OpenCV REQUIRED)

find_package(sensor_msgs REQUIRED)

find_package(cv_bridge REQUIRED)

find_package(image_transport REQUIRED)

add_executable(my_opencv src/my_opencv.cpp)

target_include_directories(my_opencv PUBLIC

$

$)

ament_target_dependencies(

my_opencv

"rclcpp"

"OpenCV"

"sensor_msgs"

"cv_bridge"

"image_transport"

)

install(TARGETS

my_opencv

DESTINATION lib/${PROJECT_NAME})

5、代码编译和实现

colcon build

source install/setup.bash

ros2 run opencv_use my_opencv

6、实现结果

在这里可以看到运行结果,一个经典的图像处理领域使用的lenna的图片。

到这里说明你ros2下的opencv库已经可以正常使用了。

##############知识补充################

Mat 类是OpenCV(Open Source Computer Vision Library)中的一个核心类,它用于表示图像和图像处理中的矩阵数据。Mat 类提供了一种灵活的方式来存储和处理图像数据,可以处理各种图像格式和通道数。

存储类型解释图像数据储存Mat 类用于存储图像的像素数据。它可以存储单通道或多通道的图像数据,支持不同的数据类型(如整数、浮点数等)。多通道图像Mat 对象可以表示多通道图像,例如彩色图像通常有三个通道:红色、绿色和蓝色。每个通道都可以是一个矩阵。灵活的构造函数你可以使用不同的构造函数来创建 Mat 对象,包括指定行数、列数、通道数和数据类型等参数。数据访问你可以通过 Mat 对象来访问和修改图像数据。例如,可以使用 Mat.at(row, col) 来获取特定位置的像素值,其中 type 是数据类型(如 int、float 等)。图像操作Mat 类还提供了许多图像处理和操作的方法,例如裁剪、调整大小、滤波、变换等。内存管理Mat 对象可以自动管理内存,因此你不必担心内存分配和释放。它使用智能指针来跟踪数据,以确保安全的内存管理。

Mat实例化构造函数

实例化形式code创建Mat空对象cv::Mat emptyMat;指定大小和数据类型的Mat对象cv::Mat image(height, width, CV_8UC3); // 创建一个 3 通道的图像,数据类型为 8 位无符号整数从已有的数据创建Mat对象int data[] = {1, 2, 3, 4, 5, 6};cv::Mat matrix(2, 3, CV_32SC1, data); // 从数组 data 创建一个 2x3 的单通道整数型矩阵从文件加载图像cv::Mat image = cv::imread(“image.jpg”); // 从文件加载图像从其他Mat对象复制数据cv::Mat copyOfImage = image.clone(); // 从现有的 Mat 对象复制数据

精彩内容

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。