2017-12-26 24 views
0

こんにちは私はこの画像の白い点の数と大きさを数えようとしています。私はopencvを使っています。私は完璧な円でできましたが、できませんこの不規則な点で。あなたは、この場合には欲しいものはおそらくない異なるパラメータを試し多数の反復を、必要があるでしょうHoughCirclesを使用してC#OpenCV画像の白い点を数えてください

private void button1_Click(object sender, EventArgs e) 
{ 

    Mat train = new Mat("blob.jpg", ImreadModes.GrayScale); 
    SimpleBlobDetector[] blobs; 

    CircleSegment[] circles; 
    Mat dst = new Mat(); 

    Cv2.GaussianBlur(train, dst, new OpenCvSharp.Size(5, 5), 1.5, 1.5); 
    circles = Cv2.HoughCircles(dst, HoughMethods.Gradient, 1, 25, 75, 60, 1, 200); 

    for (int i = 0; i < circles.Length; i++) 
    { 
     Cv2.Circle(dst, circles[i].Center, (int) circles[i].Radius, new Scalar(125), 2); 
    } 

    using (new Window("Circles", dst)) 
    { 
     Cv2.WaitKey(); 
    } 

} 

Image

答えて

1

私はあなたの問題の詳細を知らない。この小さなデモでは、私は ビットをぼかし、すべての(濃い)灰色がかったビットを除外しました。実際には「白」ではありません(otsuのしきい値を使用しています)。それから私は単にfindContoursを適用し、すべてを描いた。これはJavaコードで、私が手をつけることができる最初のものです。それにもかかわらず、あなたは理解することができ、あなたの問題解決のためにあなたを導くことができるはずです。

私が考えることができる別の可能な解決策は、OpenCVの特徴検出器(例えば、単純なブロブ検出器)を使用することである。

Mat gray = new Mat(); 
Imgproc.cvtColor(img, gray, Imgproc.COLOR_BGR2GRAY); 
Mat blur = new Mat(); 
Mat kernel = Mat.ones(2, 2, CvType.CV_8UC1); 
Imgproc.morphologyEx(gray, blur, Imgproc.MORPH_OPEN, kernel); 
Mat thresh = new Mat(); 
Imgproc.threshold(blur, thresh, 0, 255, Imgproc.THRESH_OTSU); 

List<MatOfPoint> contours = new ArrayList<MatOfPoint>(); 
Mat hierarchy = new Mat(); 
Imgproc.findContours(thresh, contours, hierarchy, Imgproc.RETR_EXTERNAL, Imgproc.CHAIN_APPROX_SIMPLE); 
Imgproc.drawContours(img, contours, -1, new Scalar(0, 0, 255), 1); 

enter image description here

関連する問題