Можно ли создать матрицу преобразования из векторов поворота / перемещения?



Я пытаюсь очистить изображение, которое имеет элемент известного размера. Учитывая этот образ:

Исходное изображение

Я могу использовать aruco:: estimatePoseBoard, который возвращает векторы вращения и трансляции. Есть ли способ использовать эту информацию, чтобы удалить все, что находится в той же плоскости, что и маркерная доска? (К сожалению, моя линейная алгебра в лучшем случае рудиментарна.)

Уточнение

Я знаю, как отделать маркерную доску. То, что я хочу уметь делать, - это снимать другие вещи (в в данном случае объект в форме облака) в той же плоскости, что и маркерная доска. Я пытаюсь определить, возможно ли это, и если да, то как это сделать. Я уже могу поместить четыре маркера вокруг объекта, который я хочу очистить, и использовать обнаруженные углы в качестве входных данных для getPerspectiveTransform вместе с известным расстоянием между ними. Но для нашего реального приложения это может быть трудно для пользователя, чтобы разместить маркеры точно. Было бы намного проще, если бы они могли поместить одну маркерную доску в рамку и иметь выравнивание программного обеспечения другие объекты.

120   2  

2 ответов:

С тех пор, как вы отметили OpenCV: Из изображения я вижу, что вы обнаружили углы всего черного ящика. Так что просто получить максимальную границу для точек в том или ином виде: Введите описание изображения здесь

Тогда это выглядит так:

std::vector<cv::Point2f> src_points={/*Fill your 4 corners here*/};
std::vector<cv::Point2f> dst_points={cv:Point2f(0,0), cv::Point2f(width,0), cv::Point2f(width,height),cv::Point2f(0,height)}; 
auto H=v::getPerspectiveTransform(src_points,dst_points);
cv::Mat copped_image;
cv::warpPerspective(full_image,copped_image,H,cv::Size(width,height));

Я застрял на предположении, что точками назначения в вызове getPerspectiveTransform должны были быть углы выходного изображения (как они есть в предложении Хумама). Как только до меня дошло, что точки назначения могут быть где-то в пределах выходного изображения, я получил ответ.

float boardX = 1240;
float boardY = 1570;
float boardWidth = 1730;
float boardHeight = 1400;

vector<Point2f> destinationCorners;
destinationCorners(Point2f(boardX+boardWidth, boardY));
destinationCorners(Point2f(boardX+boardWidth, boardY+boardHeight));
destinationCorners(Point2f(boardX, boardY+boardHeight));
destinationCorners(Point2f(boardX, boardY));

Mat h = getPerspectiveTransform(detectedCorners, destinationCorners);

Mat bigImage(image.size() * 3, image.type(), Scalar(0, 50, 50));

warpPerspective(image, bigImage, h, bigImage.size());

Этой фиксированной точки зрения правления и все в своей плоскости. (Волнистость доски объясняется тем, что бумага не лежала ровно на оригинальной фотографии.)

исправил перспективу

    Ничего не найдено.

Добавить ответ:
Отменить.