gpt4 book ai didi

C# OpenCV 计算图像中的白点

转载 作者:行者123 更新时间:2023-12-02 17:38:11 26 4
gpt4 key购买 nike

嗨,我正在尝试计算这张图像中白点的数量和大小,我正在使用 opencv,我可以用完美的圆圈来做,但我不能用这个不规则的 Blob 来做。

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

最佳答案

使用 HoughCircles,您将需要大量迭代来尝试不同的参数,在这种情况下,这可能不是您想要的。

我不知道你的问题的具体情况。对于这个小演示,我模糊了一个
位,过滤掉所有(暗)灰色位,因为它们不是真正的“白色”(使用 otsu 的阈值)。然后我就简单申请了findContours并把他们都画了下来。这是 Java 代码,我首先可以拿到手。尽管如此,您应该能够理解并让它引导您找到解决问题的方法。

我能想到的另一个可能的解决方案是使用 OpenCV 的特征检测器(例如一个简单的 blob 检测器)。

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

关于C# OpenCV 计算图像中的白点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47979431/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com