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;
}
감사합니다!
감사합니다! 그것은 작동합니다. – AylinCoskun