Я ищу способ найти не квадратную область интереса. Я видел здесь примеры, где все основано на прямоугольнике. Например здесь они находят наклонный прямоугольник. Я смотрел на примеры кода, как эта ТА страница где они рисуют прямоугольник при перетаскивании мышью из угла в угол.
Моя цель — сделать изображение, подобное изображенному ниже, и обвести дорогу. Это возможно, или мне просто нужно нарисовать прямоугольник над ним?
Редактировать: Моя оригинальная идея состоит в том, чтобы основываться на одном из этих алгоритмов, и вместо того, чтобы маркировать щелчки мышью как углы, я думаю, что я могу сохранить каждую точку, которую посетили, в векторе. Тогда я могу просто использовать cv :: Mat, чтобы заполнить все промежуточные точки. Не уверен, что это сработает, но это только начало.
Вы также можете нарисовать окно с вашим изображением и затем вызвать:
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);
Больше информации здесь:
Хорошая картина, кстати. Так что в целом ящики используются как простые. Но, как вы правильно заметили, они не так хороши для аморфных «вещей», таких как дороги и небо. У вас есть несколько вариантов.
создайте изображение маски того же размера, что и оригинал. image, и для каждого пикселя, который является «дорогой» в изображении, установите его в единицу в маске, в противном случае ноль, это сродни «раскрашиванию» изображения, как это делает ребенок в книжке-раскраске.
используйте многоугольник, который грубо обводит границы дороги. чем больше точек в многоугольнике, тем точнее сегментация.
Я обычно делаю такие вещи в GIMP, затем загружаю маски в OpenCV. Я полагаю, что для полноценной версии OpenCV вам, возможно, придется углубиться в поддерживаемый QT или OpenGL, чтобы создать небольшой инструмент для редактирования изображений.
Я нашел одну ссылку здесь для QT
http://qt-project.org/doc/qt-4.8/opengl-2dpainting.html
но, пожалуйста, обратите внимание, что я сам не пытался реализовать такую вещь, мой ответ — просто дать вам представление о двух возможностях попробовать.
Если вы хотите пометить регион вручную, вы можете избавить себя от проблем, используя графическую среду редактирования изображений, такую как GIMP, Photoshop или MATLAB.