qq_38472758
2018-04-19 13:51
采纳率: 100%
浏览 1.4k

OpenCV for Android中grabCut分割报错

代码:

 bit = BitmapFactory.decodeStream(getContentResolver().openInputStream(imageUri));

public void  MyGrabCut(){
        Mat src=new Mat();
        Mat gray=new Mat();
        Mat bg=new Mat();
        Mat fg=new Mat();
        Mat mask=new Mat();
        Utils.bitmapToMat(bit,src);
        Imgproc.cvtColor(src,gray,Imgproc.COLOR_RGBA2RGB);
        Rect rect=new Rect(20,30,100,100);
        mask.create(gray.size(), CvType.CV_8UC1);
        fg.create(gray.size(),CvType.CV_64FC1);
        bg.create(gray.size(),CvType.CV_64FC1);
        Imgproc.grabCut(gray,mask,rect,bg,fg,3,1);
    }

报了error: (-5) _model must have CV_64FC1 type, rows == 1 and cols == 13*componentsCount in function GMM::GMM,这个错误。
然后将

 fg.create(gray.size(),CvType.CV_64FC1);
 bg.create(gray.size(),CvType.CV_64FC1);

两句删除以后,就会报FATAL EXCEPTION: main
Process: com.example.administrator.myapplication, PID: 15958
CvException [org.opencv.core.CvException: cv::Exception: /build/master_pack-android/opencv/modules/imgproc/src/grabcut.cpp:380: error: (-215) !bgdSamples.empty() && !fgdSamples.empty() in function void initGMMs(const cv::Mat&, const cv::Mat&, GMM&, GMM&)
]

求问应该怎么解决???

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • 我看起来很好吃 2018-04-19 13:53
    已采纳

    grabcut 有两种抠图方式。mask rect。传的参数也有 区别。
    https://www.cnblogs.com/little-monkey/p/7598529.html
    mask 中需要标明前景 和背景
    c++代码
    Mat mask(watershedImage.size(),CV_8UC1);
    for( i = 0; i < watershedImage.rows; i++)
    for( j = 0; j < watershedImage.cols; j++ )
    {
    if(watershedImage.at(i,j)!=0)
    mask.at(i,j) = GC_PR_FGD;
    else
    mask.at(i,j) = GC_PR_BGD;
    }

    已采纳该答案
    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题