1

我想找到我在基本图像处理方法(模糊、锐化..等)中使用的图像边缘。我没有收到任何错误,但它不起作用。程序在遇到带调试的 Imgproc.Canny 或 Imgproc.findContours 方法。作为最后的手段,我编写了本机代码来查找边缘,但我无法运行它。

这是我调用寻找轮廓并执行它的代码:

   {
    Mat rawImageMatGray = new Mat();

    Imgproc.cvtColor(this.rawImageMat, rawImageMatGray, Imgproc.COLOR_BGR2GRAY);
    Imgproc.adaptiveThreshold(rawImageMatGray, rawImageMatGray, 255, Imgproc.ADAPTIVE_THRESH_MEAN_C, Imgproc.THRESH_BINARY, 55, 15);
    Bitmap segmentImage = Bitmap.createBitmap(rawImageMatGray.cols(), rawImageMatGray.rows(), Bitmap.Config.ARGB_8888);
    Utils.matToBitmap(rawImageMatGray, segmentImage);
    segmentImage = Contours(segmentImage);
    return segmentImage;
    }

    private Bitmap Contours(Bitmap cannyImage) {
    Mat cannyImageMat = new Mat();
    Mat cannyImageMat2 = new Mat();
    Utils.bitmapToMat(cannyImage, cannyImageMat);

    Mat cannyEdges = new Mat();
    Mat hierarchy = new Mat();
    List<MatOfPoint> contourList = new ArrayList<MatOfPoint>();
    //A list to store all the contours
    //Converting the image to grayscale
    //Imgproc.cvtColor(originalMat,grayMat,Imgproc.COLOR_BGR2GRAY);
      Imgproc.Canny(cannyImageMat, cannyEdges, 80, 100);

    //finding contours
    Imgproc.findContours(cannyEdges, contourList, hierarchy,   Imgproc.RETR_LIST, Imgproc.CHAIN_APPROX_SIMPLE);

   //Drawing contours on a new image
    Mat contours = new Mat();
    contours.create(cannyEdges.rows(), cannyEdges.cols(), CvType.CV_8UC3);
    Random r = new Random();
    for (int i = 0; i < contourList.size(); i++) {
        Imgproc.drawContours(contours, contourList, i, new Scalar(r.nextInt(255), r.nextInt(255), r.nextInt(255)), -1);
    }
   //Converting Mat back to Bitmap
    Bitmap cannyImage2 =    Bitmap.createBitmap(cannyImageMat2.cols(),cannyImageMat2.rows(), Bitmap.Config.ARGB_8888);
    Utils.matToBitmap(cannyImageMat2, cannyImage);
    Utils.matToBitmap(contours, cannyImage2);
    return cannyImage2;
}
4

0 回答 0