01/10/2018, 00:29
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);
Bài liên quan
có ai giúp em ko ak.
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.