Значения цвета имеют одинаковое значение по всему изображению - PullRequest
0 голосов
/ 18 июня 2019

У меня есть контур объекта и координаты центра. Сейчас я пытаюсь определить точку, лежащую на границе контура, но все еще на той же высоте (y), что и центр. Фон установлен на черный. Для этого я вычисляю пороговое изображение, перебираю пиксели и проверяю, установлены они на белый или нет. Проблема в том, что согласно моему коду все значения равны 0.

Пробовал работать и с исходным изображением. Проблема все еще возникает, я всегда получаю 0/255/255. Неважно, нахожусь ли я внутри объекта или на заднем плане.

private fun calcPointOnContour(point: Point, image: Mat): Point {
    var pointOnContour = Point()
    val ycrcb = getCbComponent(image)
    val imageThresh = getThresholdImage(ycrcb)

    for (i in point.x.toInt() until image.cols()) {
        val pixel = imageThresh.get(i, point.y.toInt())

        if (pixel[0] < 255) {
            pointOnContour = Point(i.toDouble(), point.y)
            break
        }
    }

    return pointOnContour
}

private fun getCbComponent(mat: Mat): Mat {
    val ycrcb = Mat(mat.rows(), mat.cols(), CvType.CV_8UC3)
    val lYCrCb = ArrayList<Mat>(3)

    Imgproc.cvtColor(mat, ycrcb, Imgproc.COLOR_RGB2YCrCb)
    Core.split(mat, lYCrCb)

    return lYCrCb[2]
}

private fun getThresholdImage(mat: Mat): Mat {
    val imageThresh = Mat.zeros(mat.rows(), mat.cols(), CvType.CV_8UC1)
    Imgproc.threshold(mat, imageThresh, 100.0, 255.0, Imgproc.THRESH_BINARY)

    return imageThresh
}

1 Ответ

0 голосов
/ 18 июня 2019

Imgproc.threshold - это метод, который преобразует ваше изображение в двоичное на основе заданных вами пороговых значений.https://docs.opencv.org/2.4/doc/tutorials/imgproc/threshold/threshold.html

И вы указали maxVal как 255 и, следовательно, только 0 или 255.

====

Imgproc.cvtColor(mat, ycrcb, Imgproc.COLOR_RGB2YCrCb)
Core.split(mat, lYCrCb)

Я думаю, это должно быть Core.split(ycrcb, lYCrCb)

Кроме того, вы можете добавить код, где вы создаете оригинальный мат из изображения?Возможно, там есть какая-то проблема.

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