ROS2中OPENCV的使用步骤
1、首先看自己的ros2是否安装了opencv
打开终端运行,即可得到自己的opencv版本
pkg-config --modversion opencv4
文章来源:https://www.toymoban.com/news/detail-752050.html
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 <cstdio>
#include <opencv2/opencv.hpp>
/*
通过使用 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
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:include>)
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的图片。
文章来源地址https://www.toymoban.com/news/detail-752050.html
到这里说明你ros2下的opencv库已经可以正常使用了。
##############知识补充################
Mat 类是OpenCV(Open Source Computer Vision Library)中的一个核心类,它用于表示图像和图像处理中的矩阵数据。Mat 类提供了一种灵活的方式来存储和处理图像数据,可以处理各种图像格式和通道数。
存储类型 | 解释 |
---|---|
图像数据储存 |
Mat 类用于存储图像的像素数据。它可以存储单通道或多通道的图像数据,支持不同的数据类型(如整数、浮点数等)。 |
多通道图像 |
Mat 对象可以表示多通道图像,例如彩色图像通常有三个通道:红色、绿色和蓝色。每个通道都可以是一个矩阵。 |
灵活的构造函数 | 你可以使用不同的构造函数来创建 Mat 对象,包括指定行数、列数、通道数和数据类型等参数。 |
数据访问 | 你可以通过 Mat 对象来访问和修改图像数据。例如,可以使用 Mat.at<type>(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 对象复制数据 |
到了这里,关于(一)ROS2中OPENCV的使用步骤的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!