2012-12-27 40 views
8

Tôi đang phát triển một ứng dụng Android để tính tổng tất cả các điểm của các miếng domino đang được nhìn thấy - được hiển thị trong hình ảnh - sử dụng OpenCV cho Android.OpenCV: Phát hiện các đốm tròn/ổ đĩa Domino

a sample

Vấn đề là, tôi không thể tìm thấy một cách để lọc đường nét khác và chỉ đếm chấm thấy tôi trong domino, tôi cố gắng sử dụng cạnh Canny tìm sau đó sử dụng HoughCircles, nhưng không có kết quả, như tôi không có một cái nhìn đầu tuyệt đối của đá và HoughCircles phát hiện vòng tròn hoàn hảo chỉ :)

đây là mã của tôi:

public Mat onCameraFrame(Mat inputFrame) { 
    inputFrame.copyTo(mRgba); 

    Mat grey = new Mat(); 
    // Make it greyscale 
    Imgproc.cvtColor(mRgba, grey, Imgproc.COLOR_RGBA2GRAY); 

    // init contours arraylist 
    List<MatOfPoint> contours = new ArrayList<MatOfPoint>(200);  

    //blur 
    Imgproc.GaussianBlur(grey, grey, new Size(9,9), 10);   
    Imgproc.threshold(grey, grey, 80, 150, Imgproc.THRESH_BINARY); 


    // because findContours modifies the image I back it up 
    Mat greyCopy = new Mat(); 
    grey.copyTo(greyCopy); 


    Imgproc.findContours(greyCopy, contours, new Mat(), Imgproc.RETR_TREE, Imgproc.CHAIN_APPROX_NONE);  
    // Now I have my controus pefectly 


    MatOfPoint2f mMOP2f1 = new MatOfPoint2f(); 

    //a list for only selected contours 
    List<MatOfPoint> SelectedContours = new ArrayList<MatOfPoint>(400);  

    for(int i=0;i<contours.size();i++) 
    { 

     if(here I should put a condition that distinguishes my spots, eg: if contour inside is black and is a black disk) 
     { 
      SelectedContours.add(contours.get(i)); 
     } 
    } 
    Imgproc.drawContours(mRgba, SelectedContours, -1, new Scalar(255,0,0,255), 1);  
    return mRgba;   
} 

EDIT:

Một tính năng độc đáo của đường nét của tôi sau khi ngưỡng là chúng hoàn toàn đen từ bên trong, có anyway tôi có thể tính toán màu sắc trung bình/cường độ cho một đường viền nhất định?

+0

được hiển thị trong hình nào? –

+0

Chỉ cần thêm nó, xin lỗi –

Trả lời

5

Có một vấn đề tương tự và giải pháp có thể xảy ra đối với SO, có tiêu đề Detection of coins (and fit ellipses) on an image. Ở đây bạn sẽ tìm thấy một số gợi ý về chức năng của opencv fitEllipse.

Bạn nên xem this for more info on opencv's function fitEllipse.

Ngoài ra, để chỉ phát hiện các phần tử màu đen trong một hình ảnh, bạn có thể sử dụng mẫu màu HSV, để chỉ tìm các màu đen. Bạn có thể find an explanation here.

Các vấn đề liên quan