Android OpenCV 圆的检测

当我在一张灰度图上通过opencv查找霍夫圆时能够找到圆,但是一旦对那个灰度图通过OpenCV进行二值化后则无法找到圆,以下为部分代码

 Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.image_test);
        Mat srcMat=new Mat();
        Utils.bitmapToMat(bitmap,srcMat);
        Mat grayMat=new Mat();
        //转为灰度图像
        Imgproc.cvtColor(srcMat,grayMat,Imgproc.COLOR_RGB2GRAY);
        Mat binaryMat =new Mat();
        //二值化图像
        Imgproc.threshold(grayMat,binaryMat,40,255,Imgproc.THRESH_BINARY);
          //下面如果将参数 grayMat 换成 binaryMat后则无法找到圆
        Mat effectMat = OpenCvHelper.findEffectArea(grayMat, 5, 20, 5,
                seekbarWidth.getProgress(),
                seekbarHeight.getProgress(),
                seekbarIntervalx.getProgress(),
                seekbarIntervaly.getProgress());
        if (effectMat == null) {
            Toast.makeText(this, "无法找到有效区域", Toast.LENGTH_SHORT).show();
            return;
        }
        mImage.setImageBitmap(mat2Bitmap(effectMat));

下面是OpencvHelper.findEffectArea()中查找圆的代码:

        Mat matchAnchorMat = new Mat();
         Imgproc.HoughCircles(mat, matchAnchorMat, Imgproc.CV_HOUGH_GRADIENT, 1, minDist, param1, param2, minRadius, maxRadius);
        int size = matchAnchorMat.cols();
        Log.w(TAG,"findCircle() 圆的个数:"+size);
        List<CircleInfo> pointList = new ArrayList<>();
        for (int i = 0; i < size; i++) {
            double[] data = matchAnchorMat.get(0, i);
            CircleInfo circleInfo = new CircleInfo(data[0], data[1], data[2]);
            pointList.add(circleInfo);
        }
        return pointList;
阅读 1.9k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题