鱼C论坛

 找回密码
 立即注册
查看: 2217|回复: 1

[已解决]opencv问题

[复制链接]
发表于 2021-5-28 21:49:49 | 显示全部楼层 |阅读模式
10鱼币
在linux上不好截图 我把错误复制一下 问了学长也没啥解决办法
错误
/home/yufeng001/ros_ws/src/camera_split/src/camera_splid.cpp:95:37: error: could not convert ‘0l’ from ‘long int’ to ‘cv_bridge::CvImagePtr {aka boost::shared_ptr<cv_bridge::CvImage>}’
  cv_bridge::CvImagePtr leftImgPtr_= NULL;
                                     ^
/home/yufeng001/ros_ws/src/camera_split/src/camera_splid.cpp:96:38: error: could not convert ‘0l’ from ‘long int’ to ‘cv_bridge::CvImagePtr {aka boost::shared_ptr<cv_bridge::CvImage>}’
  cv_bridge::CvImagePtr rightImgPtr_= NULL;
                                      ^

  1. #include <ros/ros.h>
  2. #include <iostream>
  3. #include <image_transport/image_transport.h>
  4. #include <cv_bridge/cv_bridge.h>
  5. #include <sensor_msgs/image_encodings.h>
  6. #include <camera_info_manager/camera_info_manager.h>

  7. #include <opencv2/opencv.hpp>
  8. #include <opencv2/imgproc/imgproc.hpp>
  9. #include <opencv2/highgui/highgui.hpp>

  10. using namespace std;

  11. class CameraSplitter
  12. {
  13. public:
  14.         CameraSplitter():nh_("~"),it_(nh_)
  15.         {
  16.                 image_sub_ = it_.subscribe("/usb_cam/image_raw", 1, &CameraSplitter::imageCallback, this);
  17.                 image_pub_left_ = it_.advertiseCamera("/left_cam/image_raw", 1);
  18.                 image_pub_right_ = it_.advertiseCamera("/right_cam/image_raw", 1);
  19.                 cinfo_ =boost::shared_ptr<camera_info_manager::CameraInfoManager>(new camera_info_manager::CameraInfoManager(nh_));

  20.                 //读取参数服务器参数,得到左右相机参数文件的位置
  21.                 string left_cal_file = nh_.param<std::string>("left_cam_file", "");
  22.                 string right_cal_file = nh_.param<std::string>("right_cam_file", "");
  23.                 if(!left_cal_file.empty())
  24.                 {
  25.                         if(cinfo_->validateURL(left_cal_file)) {
  26.                                 cout<<"Load left camera info file: "<<left_cal_file<<endl;
  27.                                 cinfo_->loadCameraInfo(left_cal_file);
  28.                                 ci_left_ = sensor_msgs::CameraInfoPtr(new sensor_msgs::CameraInfo(cinfo_->getCameraInfo()));
  29.                         }
  30.                         else {
  31.                                 cout<<"Can't load left camera info file: "<<left_cal_file<<endl;
  32.                                 ros::shutdown()
  33.                         }
  34.                 }
  35.                 else {
  36.                         cout<<"Did not specify left camera info file." <<endl
  37.                         ci_left_=sensor_msgs::CameraInfoPtr(new sensor_msgs::CameraInfo());
  38.                 }
  39.                 if(!right_cal_file.empty())
  40.                 {
  41.                         if(cinfo_->validateURL(right_cal_file)) {
  42.                                 cout<<"Load right camera info file: "<<right_cal_file<<endl;
  43.                                 cinfo_->loadCameraInfo(right_cal_file);
  44.                                 ci_right_ = sensor_msgs::CameraInfoPtr(new sensor_msgs::CameraInfo(cinfo_->getCameraInfo()));
  45.                         }
  46.                         else {
  47.                                 cout<<"Can't load right camera info file: "<<left_cal_file<<endl;
  48.                                 ros::shutdown()
  49.                         }
  50.                 }
  51.                 else {
  52.                         cout<<"Did not specify right camera info file." <<endl
  53.                         ci_right_=sensor_msgs::CameraInfoPtr(new sensor_msgs::CameraInfo());
  54.                 }
  55.         }

  56.         void imageCallback(const sensor_msgs::ImageConstPtr& msg)
  57.         {
  58.                 cv_bridge::CvImageConstPtr cv_ptr;
  59.                 namespace enc= sensor_msgs::image_encodings;
  60.                 cv_ptr= cv_bridge::toCvShare(msg, enc::BGR8);
  61.                 //截取ROI(Region Of Interest),即左右图像,会将原图像数据拷贝出来。
  62.                 leftImgROI_=cv_ptr->image(cv::Rect(0,0,cv_ptr->image.cols/2, cv_ptr->image.rows));
  63.                 rightImgROI_=cv_ptr->image(cv::Rect(cv_ptr->image.cols/2,0, cv_ptr->image.cols/2, cv_ptr->image.rows ));
  64.                 //创建两个CvImage, 用于存放原始图像的左右部分。CvImage创建时是对Mat进行引用的,不会进行数据拷贝
  65.                 leftImgPtr_=cv_bridge::CvImagePtr(new cv_bridge::CvImage(cv_ptr->header, cv_ptr->encoding,leftImgROI_) );
  66.                 rightImgPtr_=cv_bridge::CvImagePtr(new cv_bridge::CvImage(cv_ptr->header, cv_ptr->encoding,rightImgROI_) );

  67.                 //发布到/left_cam/image_raw和/right_cam/image_raw
  68.                 ci_left_->header = cv_ptr->header         //很重要,不然会提示不同步导致无法去畸变
  69.                 ci_right_->header = cv_ptr->header
  70.                 image_pub_left_.publish(leftImgPtr_->toImageMsg(),ci_left_);
  71.                 image_pub_right_.publish(rightImgPtr_->toImageMsg(),ci_right_);
  72.         }

  73. private:
  74.         ros::NodeHandle nh_;
  75.         image_transport::ImageTransport it_;
  76.         image_transport::Subscriber image_sub_;
  77.         image_transport::CameraPublisher image_pub_left_;
  78.         image_transport::CameraPublisher image_pub_right_;
  79.         boost::shared_ptr<camera_info_manager::CameraInfoManager> cinfo_;
  80.         sensor_msgs::CameraInfoPtr ci_left_;
  81.         sensor_msgs::CameraInfoPtr ci_right_;

  82.         cv::Mat leftImgROI_;
  83.         cv::Mat rightImgROI_;
  84.         cv_bridge::CvImagePtr leftImgPtr_=NULL;
  85.         cv_bridge::CvImagePtr rightImgPtr_=NULL;
  86. };

  87. int main(int argc,char** argv)
  88. {
  89.         ros::init(argc,argv, "camera_split");
  90.         CameraSplitter cameraSplitter;
  91.         ros::spin();
  92.         return 0;
  93. }

复制代码
最佳答案
2021-5-28 21:49:50
数据类型不对,不能把NULL赋值给 CvImagePtr,错误信息说的很明确了, CvImagePtr 就是
boost::shared_ptr<cv_bridge::CvImage>,库里面绝逼有初始化函数。

最佳答案

查看完整内容

数据类型不对,不能把NULL赋值给 CvImagePtr,错误信息说的很明确了, CvImagePtr 就是 boost::shared_ptr,库里面绝逼有初始化函数。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-5-28 21:49:50 From FishC Mobile | 显示全部楼层    本楼为最佳答案   
数据类型不对,不能把NULL赋值给 CvImagePtr,错误信息说的很明确了, CvImagePtr 就是
boost::shared_ptr<cv_bridge::CvImage>,库里面绝逼有初始化函数。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-4 22:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表