Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opencv 错误:函数初始化中的CV_8U_Opencv_Kinect_Depth_Mog - Fatal编程技术网

Opencv 错误:函数初始化中的CV_8U

Opencv 错误:函数初始化中的CV_8U,opencv,kinect,depth,mog,Opencv,Kinect,Depth,Mog,我使用ROS/摄像头/深度/图像主题从kinect获取图像。此图像编码类型为类型_32FC1。但是我不能用这个图像。我想做背景减法,但我有一个错误,如下所示: 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

我使用ROS/摄像头/深度/图像主题从kinect获取图像。此图像编码类型为类型_32FC1。但是我不能用这个图像。我想做背景减法,但我有一个错误,如下所示:

     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;
       }

谢谢

在将图像传送到BackgroundSubtractorMOG之前,您必须将图像转换为单通道uchar:

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