Извлечь массив координат из линии (C ++ OpenCV)
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
Вопросы из категории :
- c++ What are the barriers to understanding pointers and what can be done to overcome them?
- c++ Какой самый простой способ для анализа файла INI в C ++?
- c++ Когда вы должны использовать «друг» в C ++?
- c++ Как вы очищаете переменную stringstream?
- arrays Как удалить дубликаты из массива C #?
- arrays Как определить размер моего массива в C?
- arrays Каков наилучший способ конвертировать массив в хеш в Ruby
- arrays Сравнение двухбайтовых массивов в .NET
- opencv Как решить QPixmap :: fromImage утечка памяти?
- opencv Доступ к матричному элементу в объекте «Мат» (а не в объекте CvMat) в OpenCV C ++
- opencv Самый простой способ повернуть на 90 градусов изображение с помощью OpenCV?
- opencv Как проверить openCV на Ubuntu 9.10
- line How do you make div elements display inline?
- line Алгоритм обнаружения столкновений в кольцевом сегменте?
- line Исходный код для линейного алгоритма Сяолин Ву в C?
- line Чтение только определенных строк
- coordinates Как отобразить точку на искривленной сетке
- coordinates Консольное приложение Обнаружение / сравнение координат XY Mouse-Click XY
- coordinates широта / долгота найти ближайшую широту / долготу - комплексный sql или комплексный расчет
- coordinates Использование QGraphicsView для отображения локальной карты