ubuntu18.04 安装opencv, 利用ROS读取视频bag包,Perhaps you should add the directory containing `opencv.pc‘

ubuntu18.04 opencv安装

推荐链接:

https://blog.csdn.net/weixin_44180937/article/details/105382436

在进行opencv的安装过程中,需要下载两个文件,分别为opencv和opencv_contrib

注意:后者功能包不强制选择,这个包主要包含的是像一些DNN模块等功能,根据具体需求自行选择

在下载的过程中,下载失败的解决办法:

1、在github中,选择opencv_contrib时,注意选择与opencv对应的版本;

2、下载失败时,网上有很多解决办法,但是效果不好,最好是使用手机热点进行下载。

下载安装的过程参考网上其他教程,这里主要说一下遇到的问题解决方案;

1、OpenCV以及openc_contrib提示缺少boostdesc_bgm.i文件出错的解决

出错原因,由于网络问题导致文件下载不全,这里需要自己进行下载,并在对应的文件里面替换,替换的路径为opencv_contrib->module->xfeatures2d->src下

需要下载的文件包括如下:

  • boostdesc_bgm.i
  • boostdesc_bgm_bi.i
  • boostdesc_bgm_hd.i
  • boostdesc_lbgm.i
  • boostdesc_binboost_064.i
  • boostdesc_binboost_128.i
  • boostdesc_binboost_256.i
  • vgg_generated_120.i
  • vgg_generated_64.i
  • vgg_generated_80.i
  • vgg_generated_48.i

对应的下载链接为:

https://47.95.13.239/play/OpenCV/fatal_error/

如果是在网页上复制的话,一定要等页面加载完毕后复制,完整的文件是以];为结尾的,否则会报int_prame的错误。

2、在make的时候,有时候会存在文件不存在的现象,这可能是多线程编译引起的,因为我们可能使用的编译命令为make -j8,这时候我们可以尝试make进行编译

在安装完成后,可以检测python接口是否可以正常调用,在检测的过程中,发现可以正常输出版本号,但是在终端里使用命令查看版本号时,pkg-config --modversion opencv,显示缺少opencv.pc文件

Package opencv was not found in the pkg-config search path.
Perhaps you should add the directory containing `opencv.pc'
to the PKG_CONFIG_PATH environment variable
No package 'opencv' found

解决办法如下:

1、首先创建opencv.pc文件,这里要注意它的路径信息:

cd /usr/local/lib
sudo mkdir pkgconfig
cd pkgconfig
sudo touch opencv.pc
2、然后在opencv.pc中添加以下信息,注意这些信息需要与自己安装opencv时的库路径对应:

prefix=/usr/local
exec_prefix=${prefix}
includedir=${prefix}/include
libdir=${exec_prefix}/lib

Name: opencv
Description: The opencv library
Version:4.0.1
Cflags: -I${includedir}/opencv4
Libs: -L${libdir} -lopencv_shape -lopencv_stitching -lopencv_objdetect -lopencv_superres -lopencv_videostab -lopencv_calib3d -lopencv_features2d -lopencv_highgui -lopencv_videoio -lopencv_imgcodecs -lopencv_video -lopencv_photo -lopencv_ml -lopencv_imgproc -lopencv_flann  -lopencv_core
~                 

如果是默认安装的话,只需要修改版本号即可

3、保存退出,然后将文件导入到环境变量:

export  PKG_CONFIG_PATH=/usr/local/lib/pkgconfig

至此就配置好opencv.pc啦~,再次查看版本号就可以正常显示了!

                           

使用ROS读取视频bag包信息的方法以及注意事项:

1、我们利用播放bag包进行视频播放,所以只需要写一个订阅节点即可,订阅的话题为bag包下的图像话题名称,查看topic的方法可以使用命令:

rosbag info 包名

2、新建ROS的工作空间,这里正常建立就可以了,附上订阅节点的代码:

#include <ros/ros.h>
#include <image_transport/image_transport.h>
#include <opencv2/highgui/highgui.hpp>
#include <cv_bridge/cv_bridge.h>
 
//cv::Mat image;
void imageCallback(const sensor_msgs::ImageConstPtr& msg)
{
  try
  {
   // image = cv_bridge::toCvShare(msg, "bgr8")->image;
   // cv::imshow("view", image);
  //  cvWaitKey(1);
   cv::imshow("view", cv_bridge::toCvShare(msg, "bgr8")->image);
   cvWaitKey(1);
 
  }
  catch (cv_bridge::Exception& e)
  {
    ROS_ERROR("Could not convert from '%s' to 'bgr8'.", msg->encoding.c_str());
  }
}
 
int main(int argc, char **argv)
{
  ros::init(argc, argv, "image_listener");
  ros::NodeHandle nh;
  cv::namedWindow("view", 0);
  cv::startWindowThread();
  image_transport::ImageTransport it(nh);
  image_transport::Subscriber sub = it.subscribe("image_raw", 1, imageCallback);
   
   
  ros::spin();
  cv::destroyWindow("view");
}

重点说一下catkin_make时遇到的错误:

cam_sub.cpp:(.text+0x456): undefined reference to `cv::startWindowThread()'
cam_sub.cpp:(.text+0x735): undefined reference to `cv::destroyWindow(cv::String const&)'
collect2: error: ld returned 1 exit status
camnode/CMakeFiles/cam_sub.dir/build.make:126: recipe for target '/home/fx/Desktop/cam_test/devel/lib/camnode/cam_sub' failed
make[2]: *** [/home/fx/Desktop/cam_test/devel/lib/camnode/cam_sub] Error 1
CMakeFiles/Makefile2:1023: recipe for target 'camnode/CMakeFiles/cam_sub.dir/all' failed
make[1]: *** [camnode/CMakeFiles/cam_sub.dir/all] Error 2
Makefile:140: recipe for target 'all' failed

这里注意要修改包下的CMakelist.txt文件

在下面加入opencv的链接,如下所示:

target_link_libraries(cam_sub

${catkin_LIBRARIES}

${OpenCV_LIBS}

)

在catkin_package和find_package中加入cv_bridge和image_transport库文件

完整的CMakelist文件如下:

cmake_minimum_required(VERSION 2.8.3)
project(camnode)
find_package(OpenCV REQUIRED) 
 
find_package(catkin REQUIRED COMPONENTS
  cv_bridge
  image_transport
)
 
 
catkin_package(
#  INCLUDE_DIRS include
#  LIBRARIES my_image_transport
  CATKIN_DEPENDS cv_bridge image_transport
#  DEPENDS system_lib
)
 
include_directories(
# include
  ${catkin_INCLUDE_DIRS}
  ${OpenCV_INCLUDE_DIRS}
)


add_executable(cam_sub
  src/cam_sub.cpp
)
add_dependencies(cam_sub ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
target_link_libraries(cam_sub
  ${catkin_LIBRARIES}
  ${OpenCV_LIBS}
)

在package.xml文件中,加入依赖

  <buildtool_depend>catkin</buildtool_depend>
  <build_depend>cv_bridge</build_depend>
  <build_depend>image_transport</build_depend>
  <build_export_depend>cv_bridge</build_export_depend>
  <build_export_depend>image_transport</build_export_depend>
  <build_depend>opencv2</build_depend>
  <exec_depend>cv_bridge</exec_depend>
  <exec_depend>image_transport</exec_depend>

大家可能使用Roboware进行工程新建,使用此编译器不需要将文件加入可执行文件中,但是一些链接库还是需要手动添加的~~

 

 

 

 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值