ROSではopenCVでカメラを表示し、画像データを公開します.

9245 ワード

ROSではopenCVでカメラを表示し、画像データを公開します.
  • クライテリア
  • C++を使って
  • を実現する.
  • CMakeLists.txt構成
  • pythonを使って
  • を実現します.
  • ROSは、openCVを使用して画像を受信し、
  • を表示する.
  • ゲスト!役に立つと思ったら、賛成してください.
  • 前言
    自分もローズとopenCVを勉強し始めたばかりです.たくさんの穴を踏みます.例えば今回はrosの中でopenCVを使って、たくさんのブログによって書いたのです.最後はフリーズか、それとも黒い枠です.これに対して、先辈を教えてもらって、やっと调通しました.
    C++を使って実現します
    #include 
    #include 
    #include   //  ROS  sensor_msgs/Image       cv::Mat    
    #include  // ROS        
    #include  //            
    
    #include 
    #include 
    #include 
    #include 
    
    int main(int argc, char** argv)
    {
        ros::init(argc, argv, "imageGet_node");  // ros   ,      imageGet_node
        ros::NodeHandle nh;                      //   ros  
        image_transport::ImageTransport it(nh);  //    ROS  
        image_transport::Publisher image_pub = it.advertise("/cameraImage", 1);   //      /cameraImage
    
        ros::Rate loop_rate(200);   //       ,Hz
    
        cv::Mat imageRaw;  //       
        cv::VideoCapture capture(0);   //        ,      0(   0,2....)
    
        if(capture.isOpened() == 0)      //          
        {
            std::cout << "Read camera failed!" << std::endl;
            return -1;
        }
    
        while(nh.ok())
        {
            capture.read(imageRaw);          //        imageRaw
            cv::imshow("veiwer", imageRaw);  //         
            sensor_msgs::ImagePtr  msg = cv_bridge::CvImage(std_msgs::Header(), "bgr8", imageRaw).toImageMsg();  //       
            image_pub.publish(msg);         //       
            ros::spinOnce();                //      ,    
            loop_rate.sleep();              //          
            if(cv::waitKey(2) >= 0)         //   ms,       (    waitKey,         )
                break;        
        }
    }
    
    WaitKey()は必ず持っていなければならないです.0ではなく、他の多くのブログはこの点がないので、間違えてしまいます.
    CMakeLists.txt配置
    追加(最後の二つのイマジゲンは実行可能ファイルを生成する名前で、自分で設定します):
    find_package(OpenCV REQUIRED)
    include_directories(${OpenCV_INCLUDE_DIRS})
    add_executable(image_Get src/image_Get.cpp)
    target_link_libraries(image_Get ${catkin_LIBRARIES} ${OpenCV_LIBS})
    
    pythonを使って実現します
    次号に続く
    ROSはopenCVを使って画像を受信し、表示する.
    本人のブログを参照してください.購読部分
    ゲスト!役に立つと思ったら、賛成してください.
    コメントの討論を歓迎して、不足と提案を指摘します!