Как найти Non-Square ROI изображения?

Я ищу способ найти не квадратную область интереса. Я видел здесь примеры, где все основано на прямоугольнике. Например здесь они находят наклонный прямоугольник. Я смотрел на примеры кода, как эта ТА страница где они рисуют прямоугольник при перетаскивании мышью из угла в угол.

Моя цель — сделать изображение, подобное изображенному ниже, и обвести дорогу. Это возможно, или мне просто нужно нарисовать прямоугольник над ним?

Редактировать: Моя оригинальная идея состоит в том, чтобы основываться на одном из этих алгоритмов, и вместо того, чтобы маркировать щелчки мышью как углы, я думаю, что я могу сохранить каждую точку, которую посетили, в векторе. Тогда я могу просто использовать cv :: Mat, чтобы заполнить все промежуточные точки. Не уверен, что это сработает, но это только начало.

Длинная ветреная дорога

1

Решение

Вы также можете нарисовать окно с вашим изображением и затем вызвать:

cvSetMouseCallback( const char* window_name, CvMouseCallback on_mouse, void* param=NULL )

Сохраняйте каждый раз, когда щелкаете по позиции x, y в списке, массиве, dict, как хотите :). Постройте с этой информацией новый коврик в качестве маски. Используйте полигон для приближения:

// Create Polygon from vertices
vector<Point> ROI_Poly;
approxPolyDP(ROI_Vertices, ROI_Poly, 1.0, true);

// Fill polygon white
fillConvexPoly(mask, &ROI_Poly[0], ROI_Poly.size(), 255, 8, 0);

Больше информации здесь:

http://www.pieter-jan.com/node/5

1

Другие решения

Хорошая картина, кстати. Так что в целом ящики используются как простые. Но, как вы правильно заметили, они не так хороши для аморфных «вещей», таких как дороги и небо. У вас есть несколько вариантов.

  1. создайте изображение маски того же размера, что и оригинал. image, и для каждого пикселя, который является «дорогой» в изображении, установите его в единицу в маске, в противном случае ноль, это сродни «раскрашиванию» изображения, как это делает ребенок в книжке-раскраске.

  2. используйте многоугольник, который грубо обводит границы дороги. чем больше точек в многоугольнике, тем точнее сегментация.

Я обычно делаю такие вещи в GIMP, затем загружаю маски в OpenCV. Я полагаю, что для полноценной версии OpenCV вам, возможно, придется углубиться в поддерживаемый QT или OpenGL, чтобы создать небольшой инструмент для редактирования изображений.

Я нашел одну ссылку здесь для QT
http://qt-project.org/doc/qt-4.8/opengl-2dpainting.html

но, пожалуйста, обратите внимание, что я сам не пытался реализовать такую ​​вещь, мой ответ — просто дать вам представление о двух возможностях попробовать.

2

Если вы хотите пометить регион вручную, вы можете избавить себя от проблем, используя графическую среду редактирования изображений, такую ​​как GIMP, Photoshop или MATLAB.

0
По вопросам рекламы [email protected]