Xác định đường viền của 1 tia laser bằng OpenCV

Em đang làm bài tập dùng OpenCv để nhận diện đường viền của 1 tia laser như hình đây:

nhưng khi em làm thì nó lấy cả khoảng tia đỏ bên rìa nữa, hình như đây:
Các a có thể giúp e lấy khoảng màu chuẩn trong vòng đấy đc ko ạ,
Đây là source :

    Mat mtCircles = new Mat();
    double[] data;
    List<Point> circlesPoint = new ArrayList<>();
    Mat mtDetectCires = new Mat(mBitmap.getWidth(), mBitmap.getHeight(), CvType.CV_8UC1);
    mtOrgBitmap = mtDetectCires.clone();
    Utils.bitmapToMat(mBitmap, mtDetectCires);
    Imgproc.medianBlur(mtDetectCires, mtDetectCires, 3);
    Imgproc.cvtColor(mtDetectCires, mtDetectCires, Imgproc.COLOR_RGB2HSV);

    Mat lower_red_hue_range = new Mat();
    Mat upper_red_hue_range = new Mat();
    Mat red_hue_image = new Mat();

    Core.inRange(mtDetectCires, new Scalar(0, 100, 100), new Scalar(10, 255, 255), lower_red_hue_range);
    Core.inRange(mtDetectCires, new Scalar(160, 100, 100), new Scalar(179, 255, 255), upper_red_hue_range);
    Core.addWeighted(lower_red_hue_range, 1.0, upper_red_hue_range, 1.0, 0.0, red_hue_image);

    Imgproc.blur(red_hue_image, red_hue_image, new Size(9, 9));
    Imgproc.threshold(red_hue_image, red_hue_image, -1, 255
            , Imgproc.THRESH_BINARY + Imgproc.THRESH_OTSU);

    List<MatOfPoint> contours = new ArrayList<>();
    Imgproc.findContours(red_hue_image, contours, new Mat()
            , Imgproc.RETR_EXTERNAL, Imgproc.CHAIN_APPROX_SIMPLE);

có ai giúp em ko ak. :joy:

Nhìn trên hình có thể thấy ngưỡng của cậu chưa chuẩn (quá thấp)
Mà mỗi đường viền sao mà khổ vậy ?
Biến nó thành ảnh xám. Dùng thuật toán loang và ngưỡng để xác định .
Nếu loang đến pixel có mức xám nhỏ hơn ngưỡng -> đã chạm biên-> đánh dấu pixel đó.
Tập hợp các pixel sẽ là đường viền.

cảm ơn cậu, mình đã đổi theo hệ màu HSV của OpenCv và tìm ra được ngưỡng rồi.

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?