Antonio Antonio - 2 months ago 12
Java Question

How are two-element vector represented in a OpenCV Mat in Java?

I was looking at Opencv Java documentation of Hough Transform.

The return value

lines
is in a
Mat
data type described as:


Output vector of lines. Each line is represented by a two-element
vector (rho, theta). rho is the distance from the coordinate origin
(0,0) (top-left corner of the image). theta is the line rotation angle
in radians (0 ~ vertical line, pi/2 ~ horizontal line).


Curiously, this description matches the C++ interface's description, but the data type not: in C++ you can use a
std::vector<cv::Vec2f> lines
as described in this tutorial. In C++ the returned data representation, given the description, is straightforward, but in Java not.

So, in Java, how are the two-element vector represented/stored in the returned Mat?

Answer

Here's some code I used a while ago, in version 2.4.8 I think. matLines came from this:

Imgproc.HoughLinesP(matOutline, matLines, 1, Math.PI / 180, houghThreshCurrent, houghMinLength, houghMaxGap);

...

Point[] points = new Point[]{ new Point(), new Point() };
for (int x = 0; x < matLines.cols(); x++) {
   double[] vec = matLines.get(0, x);
   points[0].x = vec[0];
   points[0].y = vec[1];
   points[1].x = vec[2];
   points[1].y = vec[3];
   //...
}
Comments