Извлечь массив координат из линии (C ++ OpenCV)

c++ arrays opencv line coordinates

1738 просмотра

2 ответа

Используя C ++ / OpenCV, я нарисовал линию на изображении с помощью, cv::lineи теперь я пытаюсь извлечь массив его координат. Я попытался назначить строку, cv::Matно я получаю сообщение об ошибке, в котором не могу выполнить преобразование из void в cv::Mat. Есть ли простой способ получить эти координаты?

Спасибо за помощь!

Автор: MSTTm Источник Размещён: 12.11.2019 09:02

Ответы (2)


4 плюса

Решение

У вас есть хотя бы пара вариантов. Предполагая, что вы знаете две конечные точки Aи Bлинии:

1) Нарисуйте линию с 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;
}
Автор: Miki Размещён: 04.08.2015 11:25

3 плюса

Вы можете увидеть этот ответ. Я предполагаю, что это то, что нужно вашему вопросу, Нахождение точек в линии .

Opencv имеет функцию Line Iterator . Пройдите документацию!

Вот пример использования!

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
}
Автор: Karthik Размещён: 04.08.2015 09:24
Вопросы из категории :
32x32