Горячие линии в Android Kotlin, кажется, начинаются в неправильных координатах

Я использую Houghlines OpenCV, чтобы попытаться найти прямоугольники на чертеже, но кажется, что используемая мной процедура создает линии с конечными точками по краям и по диагонали.

Код, который я использую, взят из кода Java, который я нашел в другом месте на Stackru Houghlines в Android с OpenCV. Он был изменен для Kotlin, но мне интересно, изменился ли формат данных между языками, несмотря на то, что Kotlin тесно связан с Java:

private fun HoughlinesTest(baseMat : Mat) {
    val grayMat = Mat()
    cvtColor(baseMat, grayMat, Imgproc.COLOR_BGRA2GRAY)

    val RHO : Double = 1.0
    val THETA : Double = Math.PI / 180
    val threshold : Int = 50
    val lines = Mat()
    Imgproc.HoughLinesP(grayMat, lines, RHO, THETA, threshold)
    val MIN_DIST = 10.0
    for (x in 0 until lines.rows()) {
        val vec = lines.get(x, 0)
        val x1 = vec[0]
        val y1 = vec[1]
        val x2 = vec[2]
        val y2 = vec[3]
        val start = Point(x1, y1)
        val end = Point(x2, y2)
        val dx = x1 - x2
        val dy = y1 - y2
        val dist = Math.sqrt(dx * dx + dy * dy)
        if (dist > MIN_DIST) {
            Imgproc.line(grayMat, start, end, Scalar(0.0, 255.0, 0.0, 255.0), 5)// here initimg is the original image.
        }
    }
    val linesBitmap = Bitmap.createBitmap(grayMat.width(), grayMat.height(), Bitmap.Config.ARGB_8888)
    Utils.matToBitmap(grayMat, linesBitmap)
    imageView.setBitmap(linesBitmap)
}

Исходное изображение и выходные изображения показаны.

Пример вывода, который я распечатал, показывает, почему точки по краям, по некоторым причинам.

I/System.out: Line at {0.0, 53.0} to {142.0, 195.0} with a length of 200.8
I/System.out: Line at {35.0, 0.0} to {186.0, 151.0} with a length of 213.5
I/System.out: Line at {0.0, 74.0} to {121.0, 195.0} with a length of 171.1
I/System.out: Line at {32.0, 0.0} to {186.0, 154.0} with a length of 217.8
I/System.out: Line at {67.0, 0.0} to {186.0, 119.0} with a length of 168.3
I/System.out: Line at {7.0, 0.0} to {186.0, 179.0} with a length of 253.1

Если я проигнорирую все линии, имеющие координату границы, я все равно получу линии вдоль диагонали:

0 ответов

Другие вопросы по тегам