Antonio - 5 months ago 43

Java Question

I was looking at Opencv Java documentation of Hough Transform.

The return value

`lines`

`Mat`

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,

`std::vector<cv::Vec2f> lines`

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];
//...
}
```