Итак, кажется, API со временем изменился.Современный способ заставить HoughLinesP работать в JavaCV
я, насколько
import org.bytedeco.javacpp.opencv_core.{Mat, Point, Scalar}
import org.bytedeco.javacpp.{opencv_core, opencv_imgcodecs, opencv_imgproc}
val mat = opencv_imgcodecs.imread("test-in.jpg")
val greyMat = new Mat()
val lines = new Mat()
opencv_imgproc.cvtColor(mat, greyMat, opencv_imgproc.CV_BGR2GRAY, 1)
val rho = 1.0
val theta = 1.0.toRadians
val thresh = 50
val minLineLen = 80
val maxLineGap = 50
opencv_imgproc.HoughLinesP(greyMat, lines, rho, theta, thresh,
minLineLen, maxLineGap)
for (i <- 0 until lines.rows()) {
val pt1 = ??? : Point
val pt2 = ??? : Point
val colr = new Scalar(0, 0, 255, 128)
opencv_imgproc.line(mat, pt1, pt2, colr, 1, opencv_core.LINE_AA, 0)
}
opencv_imgcodecs.imwrite("test-out.jpg", mat)
Но я не знаю, как извлечь точки из lines
матрицы. Например, this old post предлагает такую вещь, как MatOfInt4
, которую я не нахожу. Кроме того, есть ответ, который говорит, что я могу сделать lines.get(0, x)
по Mat
, методу, который не существует.
Тогда я нахожу another variant, который использует UByteRawIndexer
, но клетка в моей матрице имеет три вместо четырех элементов (это, возможно, потому, что я называю HoughLinesP
и не HoughLines
).
Так как, черт возьми, я получаю очки от звонка HoughLinesP
? JavaCV - 1,2, OpenCV - 3.1.
Если я запросить lines
матрицу для своего размера, я получаю rows = 19167, cols = 1
; Я создаю Indexer
, который выглядит UByteRawIndexer
, я получаю sizes = [1958, 2196, 3]
. Ничто из этого не имеет смысла для меня. lines
также есть depth = 5
и type = 13
.