これは、APIが経時的に変更されたようです。JavaCVでHoughLinesPを動作させる現代的な方法
私は限り
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
というようなことを示唆しています。また、Mat
にlines.get(0, x)
、存在しないメソッドを実行できるとの回答があります。
は、その後、私はUByteRawIndexer
使用another variantを見つけることが、私のマトリックス中の細胞は、(私はHoughLinesP
なくHoughLines
を呼び出すので、これはおそらくです)の代わりに四つの要素のうち3つを持っています。
HoughLinesP
コールからポイントを取得するにはどうすればよいですか? JavaCVは1.2、OpenCVは3.1です。
私はそのサイズのためlines
行列を照会した場合、私はrows = 19167, cols = 1
を取得します。私はUByteRawIndexer
のように見えるIndexer
を作成します、私はsizes = [1958, 2196, 3]
を得ます。これのどれも私には意味がありません。 lines
もdepth = 5
とtype = 13
です。