Ubuntu22.04, ros2 usa opencv incorporado para leer imágenes

He estado buscando tutoriales sobre cómo usar la biblioteca opencv incorporada o personalizar la instalación de la biblioteca opencv en ros2 desde Internet durante mucho tiempo, lo encontré confuso, después de seguir la configuración, todavía no se puede usar. El problema más común es que no se puede encontrar. Errores no definidos como el archivo de encabezado o la referencia no definida a 'cv::imread(std::cxxll::basic string<char, std::char traces, std::allocator > constante&, int)'.
Y debido a que seguí el tutorial para instalar opencv, el opencv que venía con mi ros2 se sobrescribió y luego dediqué un tiempo a reinstalar ros2. Antes estaba aprendiendo ros2
con el maestro Zhao Xuzuo y el maestro dijo que si tenía alguna pregunta. , Puedo ir al foro de ros2 para buscar. Puede haber respuestas, así que busqué con la actitud de intentarlo y, efectivamente, encontré una solución al problema de cómo usar opencv que viene con ros2.

1. Primero verifique si ros2 tiene opencv instalado.

Ejecute en la terminal:
pkg-config --modversion opencv4
descubre que se obtendrá el número de versión de opencv, lo que indica que opencv ya existe.

2. Integre opencv y ros2

Al crear el paquete de funciones ros2, agregue dependencias opencv:
ros2 pkg create my_ros2_opencv_pkg --dependencies rclcpp OpenCV
o
ros2 pkg create my_ros2_opencv_pkg --dependencies rclcpp std_msgs sensor_msgs cv_bridge image_transport OpenCV
Estas dos instrucciones pueden ser seguidas por --node-name node.name

3. En el archivo .cpp, agregue el archivo de encabezado:

#incluir <cv_bridge/cv_bridge.h>
#incluir <image_transport/image_transport.hpp>
#incluir <opencv2/opencv.hpp>

4. Configurar CMakeLists.txt

Si se agrega --node-name al generar el paquete de funciones, no es necesario configurar el archivo CMakeLists.txt.
add_executable(my_ros2_opencv_node src/name_of_your_cpp_file.cpp)
ament_target_dependencies(my_ros2_opencv_node rclcpp std_msgs sensor_msgs cv_bridge image_transport OpenCV)
install(OBJETIVOS
my_ros2_opencv_node
DESTINO lib/${PROJECT_NAME}
)
Enlace original .
(En infracción y supresión)

5. Agrega la ruta de la imagen.

Cuando utilice la función imread, debe agregar la ruta de la imagen, buscar la imagen que desea leer, hacer clic con el botón derecho del mouse, seleccionar "Propiedades", buscar "Básico" -> "Carpeta superior", seleccionarla. cópielo y péguelo en el programa, y ​​luego cambie / a // para leer la imagen.
El procedimiento es el siguiente:

#include "rclcpp/rclcpp.hpp"
#include <cv_bridge/cv_bridge.h>
#include <image_transport/image_transport.hpp>
#include <opencv2/opencv.hpp>

using namespace cv;
int main(int argc, char ** argv)
{
    
    
  (void) argc;
  (void) argv;

  printf("hello world pkg00_opencv package\n");
  Mat m=imread("//home//***//image//01.jpg");  //路径需要自己修改成自己电脑中的
  RCLCPP_INFO(rclcpp::get_logger("rclcpp"),"size:%d,%d",m.rows,m.cols);
  imshow("01",m);
  waitKey(0);
  return 0;
}

Insertar descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/weixin_42283539/article/details/129027158
Recomendado
Clasificación