Как найти средний цвет области в изображении? - PullRequest
0 голосов
/ 25 мая 2019

У меня есть Mat из обнаруженных circles с использованием HoughCircles, и я перебираю их и добавляю к List
Теперь я хочу получить средний цвет обнаруженных кругов, чтобы проверить, отмечен этот круг или нет (например, изображение ниже)

enter image description here

Mat circles = new Mat();
Imgproc.HoughCircles(adaptiveThresh, circles, Imgproc.HOUGH_GRADIENT, 1.0, (double) adaptiveThresh.rows() / 40, 100.0, 30.0, 20, 30);

List<Circle> circleList = new ArrayList<>();
Point p1 = new Point(0, 0);

for (int x = 0; x < circles.cols(); x++) {
    double[] c = circles.get(0, x);
    Point center = new Point(Math.round(c[0]), Math.round(c[1]));
    int radius = (int) Math.round(c[2]);
    Imgproc.circle(source, center, radius, new Scalar(255,0,255), 3, 8, 0 );

    Circle circle = new Circle();
    circle.centerY = (int) center.y;
    circle.centerY = (int) center.y;

    circle.radius= radius;

    circle.x = circle.centerX - circle.radius;
    circle.y = circle.centerY - circle.radius;

    circle.distance = Math.sqrt(Math.pow(Math.abs(p1.x - circle.centerX), 2) + Math.pow(Math.abs(p1.y - circle.centerY), 2));

    circleList.add(circle);
    Log.d(TAG, "scan2: x->" + circle.x + "\ty->" + circle.y);
}

Надеюсь, я получу все 200 кругов из этого изображения, но я хочу определить, какие круги помечены (например, первый ряд и второй круг помечены!)

Как определить, какой круг помечен, а также узнать, какая это строка и столбец!

Есть 2 столбца, в каждом столбце по 25 строк, в каждом ряду 4 круга, всего 200 кругов

1 Ответ

0 голосов
/ 25 мая 2019

что вы хотите, это

static Scalar   mean(Mat src) 
          Calculates an average (mean) of array elements.

Обнаружен круг, нарисуйте замкнутый круг в качестве маски, введите

Mat maskimg=new Mat(); //this image changes for every different circle
Imgproc.circle(maskimg, center, radius, new Scalar(255,255,255), **-1**, 8, 0 );
//draw filled circle on a image
Scalar averagecolor=core.mean(inputimage,masking);
double averageintensity=(averagecolor[0]+averagecolor[1]
+averagecolor[2])/3

if(averageintensity> your preset)
check position to see if answer is correct based on the official answer position

Моя ява плохая. Я написал это без компиляции. Так что может быть грамматическая ошибка, используйте ее с осторожностью

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...