Извлечь массив координат из строки (C++ OpenCV)
Используя C++ / OpenCV я нарисовал линию на изображении с помощью cv::line и теперь пытаюсь извлечь массив его координат. Я попытался назначить строку cv::Mat, но получил ошибку, в которой говорится, что я не могу преобразовать void в cv::Mat. Есть ли простой способ получить эти координаты?
Спасибо за помощь!
2 ответов:
У вас есть, по крайней мере, несколько вариантов. Предположим, что вам известны две конечные точки
1) Нарисуйте линию с помощьюAиBстроки:line(...)на нулевой инициализированной маске того же размера, что и ваше изображение, и извлеките точки На линии (которые будут единственными белыми точками на маске) с помощьюfindNonZero(...). 2) ИспользуйтеLineIteratorдля извлечения точек, не рисуя их и не создавая маску.Вам нужно хранить свои очки в
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; }
Вы можете увидеть этот ответ. Я предполагаю, что это то, что нужно вашему вопросу, поиск точек в линии.
Opencv имеет функциюлинейного итератора . Пройдите через документацию!
Вот пример использования!
LineIterator it(img, pt1, pt2, 8); for(int i = 0; i < it.count; i++, ++it) { Point pt= it.pos(); //Draw Some stuff using that Point pt }
Comments