Горячие линии в Android Kotlin, кажется, начинаются в неправильных координатах - PullRequest
0 голосов
/ 01 марта 2019

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

Код, который я использую, взят из кода Java, который я нашел в другом месте на StackOverflow Горячие линии в 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)
}

Отображаются исходное изображение и выходные изображения.

Original image Image after Houghlines

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

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

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

enter image description here

...