2014-11-11 7 views
0

ROS/카메라/깊이/이미지 항목을 사용하여 kinect에서 이미지를 가져옵니다. 이 이미지 인코딩 유형은 TYPE_32FC1입니다. 그러나 나는이 이미지를 사용할 수 없다. 아래 그림과 같이 나는 배경 뺄셈을하고 싶어하지만 오류가 있습니다오류 : CV_8U 함수 초기화 중

 terminate called after throwing an instance of 'cv::Exception'  what():/build/buildd/opencv-.4.8+dfsg1/modules/video/src/bgfg_gaussmix.cpp:117 : 
    error: (-215) CV_MAT_DEPTH(frameType) == CV_8U in function initialize 

코드는 다음과 같습니다

class ImageConverter 
{ 
    //convert image pointer 
    cv_bridge::CvImagePtr cv_ptr; 
    //to get ros node 
    ros::NodeHandle nh_; 
    image_transport::ImageTransport it_; 
    image_transport::Subscriber image_sub_; 

    //for back_sub 
    //global variables 
    Mat frame; //current frame 
    Mat fgMaskMOG; //fg mask generated by MOG method 

    Ptr<BackgroundSubtractor> pMOG; //MOG Background subtractor 

    public: 
    ImageConverter(): it_(nh_) 
    { 
     //using ros subscribe node to get dept image 
     image_sub_ = it_.subscribe("camera/depth/image", 1, &ImageConverter::imageCb, this); 
    //create MOG object 
    pMOG= new BackgroundSubtractorMOG(); //MOG approach 

    } 
    void imageCb(const sensor_msgs::ImageConstPtr& msg) 
     { 
    //convert depth data to opencv 
    cv_ptr = cv_bridge::toCvCopy(msg, sensor_msgs::image_encodings::TYPE_32FC1); 
    processVideo(); 
    cv::waitKey(3); 

     } 


    void processVideo() 
    { 
     //showing depth image 
     imshow("Image", cv_ptr->image); 
     //using MOG function to subtract image 
     pMOG->operator()(cv_ptr->image, fgMaskMOG); 
     //showing background suntraction image 
     imshow("Image2", fgMaskMOG); 

    } 

    }; 
     //test 
     int main(int argc, char** argv) 
     { 
      ros::init(argc, argv, "subtract_node"); 
      ImageConverter ic; 
      ros::spin(); 
      return 0; 
     } 

감사합니다!

답변

0

당신은 BackgroundSubtractorMOG에 공급하기 전에 단일 채널 UCHAR로 이미지를 변환해야합니다 :

Mat gray; 
cv_ptr->image.convertTo(gray, CV_8U, 255); // unsure about the scale. 
pMOG->operator()(gray, fgMaskMOG); 
+0

감사합니다! 그것은 작동합니다. – AylinCoskun