Using C++ / OpenCV I've drawn a line on an image using cv::line
and now I'm trying to extract an array of its coordinates. I've tried assigning the line to cv::Mat
but I get an error stating I cannot convert from void to cv::Mat
. Is there a simple way to obtain these coordinates?
Thanks for the help!
You have at least a couple of options. Assuming that you know the two endpoints A
and B
of the line:
1) Draw the line with line(...)
on an zero initialized mask of the same size of your image, and retrieve the points on the line (which will be the only white points on the mask) with findNonZero(...)
.
2) Use LineIterator
to retrieve the points, without the need of drawing them nor creating a mask.
You need to store your points in a vector<Point>
.
#include <opencv2/opencv.hpp>
#include <vector>
using namespace std;
using namespace cv;
int main(int, char** argv)
{
Mat3b image(100,100); // Image will contain your original rgb image
// Line endpoints:
Point A(10,20);
Point B(50,80);
// Method: 1) Create a mask
Mat1b mask(image.size(), uchar(0));
line(mask, A, B, Scalar(255));
vector<Point> points1;
findNonZero(mask, points1);
// Method: 2) Use LineIterator
LineIterator lit(image, A, B);
vector<Point> points2;
points2.reserve(lit.count);
for (int i = 0; i < lit.count; ++i, ++lit)
{
points2.push_back(lit.pos());
}
// points1 and points2 contains the same points now!
return 0;
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With