qq_38472758 2018-04-19 13:51 采纳率: 100%
浏览 1522
已采纳

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 Qt下使用tcp获取数据的详细操作
  • ¥15 idea右下角设置编码是灰色的
  • ¥15 全志H618ROM新增分区
  • ¥20 jupyter保存图像功能的实现
  • ¥15 在grasshopper里DrawViewportWires更改预览后,禁用电池仍然显示
  • ¥15 NAO机器人的录音程序保存问题
  • ¥15 C#读写EXCEL文件,不同编译
  • ¥15 MapReduce结果输出到HBase,一直连接不上MySQL
  • ¥15 扩散模型sd.webui使用时报错“Nonetype”
  • ¥15 stm32流水灯+呼吸灯+外部中断按键