Jump to content
Compvision.ru

Search the Community

Showing results for tags 'OpenCV'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • Пакет OpenCV
    • OpenCV
    • Новости
    • Вопросы взаимодействия OpenCV + GDI, GDI+
  • Дополненная реальность (ARToolkit и др.)
    • ARToolkit
  • Нейросети
    • Вопросы по нейросетям и ИИ
  • Общие вопросы
    • Обсуждение общих вопросов
  • Другое

Jabber


Skype


Расположение


Интересы

Found 81 results

  1. Добрый день. В программе осуществляется поиск углов шахматной доски на фотографии. Для этого используется FindChessboardCorners в C#. По найденным углам строятся линии. Дело в том, что точки (когда вывожу их все на изображение, и когда только 4 угла), при определении "дрожат". Не знаю, с чем это связано. Пробовал разные флаги для этой функции, пробовал ставить на жесткую подставку - все равно. Есть ли какие-нибудь способы более точного определения с помощью готовых методов в OpenCV? Я пытался сделать следующим образом: Подсчитать медиану всех расстояний между точками вдоль каждой стороны, и применить ее для всех, но это работает только если камера не под наклоном. Файл с коротким видео, как это выглядит (я понимаю, что почти все тут это наблюдали при калибровке, но всё же). for compvision.mp4
  2. С помощью функции cv::filter2D() нужно создать фильтр, который находит в изображении только прямые, наклоненные под углом 60 градусов. Примените его к достаточно интересной сцене и выведите результат car = cv2.imread("car.jpg") kernel = np.ones((3,3)) #cv2.filter2D(src, ddepth, kernel[, dst[, anchor[, delta[, borderType]]]]) DST=cv2.filter2D(car, 14, kernel) cv2.imshow("DST",DST) cv2.waitKey(0) cv2.destroyAllWindows() Я немного не осилил documentation и до меня не дошло, как задать именно 60 градусов в данной функции. Буду рад, если кто-нибудь поможет с реализацией и объяснит,как работает якорь в данной функции.
  3. Добрый день! Подскажите пожалуйста как лучше реализовать обнаружение нескольких различных предметов на одном изображении? мы используем классификатор обнаружения лица "lbpcascade_frontalface.xml" и умеем обнаруживать лицо на изображении, и допустим у нас есть еще несколько различных классификаторов "собаки.xml", "кошки.xml", "сигареты.xml" и т.д. как можно реализовать обнаружение всех этих классификаторов на одном изображении одновременно ? какой алгоритм или подход лучше использовать? Программу реализуем на opencv 2.4.1 (C++) заранее большое спасибо всем кто откликнется.
  4. Здравствуйте. Пытался ли кто-нибудь создать dll из С++-кода, использующего OpenCV, и использовать её в C++ или C#? Я столкнулся со следующим: Преодолев ошибки, связанные с созданием динамических типов данных в тестовой dll, я подумал, что проблема уже решена. Теперь я могу использовать контейнеры в коде dll, но как только я создаю что-то из OpenCV (я пробовал создать матрицу cv::Mat, заполненную нулями), то функция LoadLibrary возвращает нулевой указатель. Работаю в x64 Debug, opencv_world411.dll так же клал в папку проекта. Если потребуется код и его результаты (которые я описал, в принципе, про нулевой указатель), могу потом запостить его.
  5. Добрый день! Я - практически новичок в OpenCV, хотя в математике разбираюсь неплохо. Столкнулся с задачей: нужно найти на фотографии стекло (фотография прилагается) и определить координаты четырех его углов. Фотография сделана при, скорее всего, неправильном освещении. Пробовал сделать это через поиск линий HoughLines, а так же через углы методом Харриса. Ни в первом, ни во втором случаях не удалось подобрать правильные параметры для поиска (пороговые значения, углы). Существуют ли типичные методы для подобных задач, или же для каждой задачи требуется свой подход? Не хотелось бы изобретать велосипед Спасибо.
  6. железо для openCV

    Коллеги, как подобрать железо для opencv, в интернете сотни статей для железа для machinelearning, а вот как собрать комп для машинного зрения. Вкратце, моя история, я отслеживаю перемещению муравей в аквариуме- научный интерес, но постоянно имею проблемы, потеря объекта, они сволочи дергаются порой, так же, я могу следить в один момент только за 4 - иначе комп виснет, но тут понятно, наверное, комп мощнее, ну а в плане отслеживания, можно ли как то сделать чтобы повысить возможности openCV, я как вижу, купить самую навороченную камеру и под нее подобрать видеокарту и проц мощнее, это верно? что можно сделать я использовал следующие функции 1.tracking - cv2.TrackerCSRT_create () и др, 2.hara cascade, 3.color tracking, 4.optical flow, 5. frame difference, может что забыл?
  7. Здравствуйте. Меня зовут Сергей. Я использую камеры HIWATCH DS-T101 подключенные к регистратору HIWATCH DS-104. У меня следующий вопрос: на данный момент я экспериментирую с компьютерным зрением . Программу пишу на python используя библиотеку opencv. В интернете я нашел много информации по получению видео потока с IP камер, к примеру: #receiving video from IP camera import cv2######################ip camers stream = cv2.VideoCapture('access protocol://login_cam:password_cam@IP') while True: r, f = stream.read() cv2.imshow('IP Camera stream',f) if cv2.waitKey(1) & 0xFF == ord('q'): break cv2.destroyAllWindows() Как мне сделать то же самое но с регистратором ?
  8. Задача у меня такая сравнить 2 картинки и сказать похожи ли они. Для начала я нахожу гистограммы каждого изображения и сравниваю их мерой сходства. Далее полученное расстояние и сравниваю с неким порогом, если оно меньше порога, то выполняю подсчет дескриптора AKAZE, отфильтровываю по расстоянию хемминга и фильтром RANSAC. далее проверяю что после фильтрации свсязей осталось больше 6, если больше то говорю что изображения похожи. как вам мой подход? он верен?
  9. Добрый день! Необходимо отслеживать перемещения людей (идеально головы человека), при постоянно изменяющемся освещении. Цвет может быть красным, зеленым, синим, дневное освещение и может постоянно меняться. Можно ли стандартными методами и какими решить данную задачу?
  10. Доброе время суток! Необходимо распознать автомобильный номер на изображении, для увеличения точности решил трансформировать номер так, будто камера смотрит прямо на него. Для выполнения задачи решил найти верхнюю и левую линии, и из них рассчитать углы, но столкнулся с проблемой. Метод CvInv oke.HoughLines находит большое количество линий, но даже при увеличении порога правильная линия попадается редко. Написал аналог данного метода C# но для поиска только самой явной линии, однако он страдает той же проблемой. Разница где то в 15 градусов, если "докинуть" их вручную выходит почти правильно. За основу алгоритма был взят CvInv oke.HoughLines, сам метод: public static unsafe LineSegment2D FindBestLineD(Mat input, double minTheta, double maxTheta, double theta, int rho) { int width = input.Width; int height = input.Height; int max_rho = (int)Math.Sqrt(width * width + height * height); int min_rho = -max_rho; int thetaCount = (int)((maxTheta - minTheta) / theta); int rhoCount = (int)(((max_rho - min_rho) + 1) / rho); double[] thetaArr = new double[thetaCount]; double tmp = minTheta; double[] sinTheta = new double[thetaCount]; double[] cosTheta = new double[thetaCount]; for (int i = 0; i < thetaCount; i++) { thetaArr = tmp; sinTheta = Math.Sin(tmp); cosTheta = Math.Cos(tmp); tmp += theta; } int[,] accum = new int[rhoCount, thetaCount]; Bitmap bitmap = input.Bitmap; BitmapData bitmapData = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height), ImageLockMode.ReadOnly, bitmap.PixelFormat); byte* Pixels = (byte*)bitmapData.Scan0.ToPointer(); int stride = bitmapData.Stride; int shift = 0; for (int h = 0; h < height; h++) { shift = stride * h; for (int w = 0; w < width; w++) { if (Pixels[shift + w] != 0) { for (int i = 0; i < thetaCount; i++) { int r = (int)(h * sinTheta + w * cosTheta); r += rhoCount / 2; accum[r, i]++; } } } } bitmap.UnlockBits(bitmapData); int MaxValue = 0; int BestRho = 0; double BestTheta = 0; for (int t = 0; t < thetaArr.Length; t++) { for (int r = 0; r < rhoCount; r++) { if (accum[r, t] > MaxValue) { MaxValue = accum[r, t]; BestTheta = thetaArr[t]; BestRho = r - rhoCount / 2; } } } //BestTheta += theta * 15; var pt1 = new Point(); var pt2 = new Point(); var a = Math.Cos(BestTheta); var b = Math.Sin(BestTheta); var x0 = a * BestRho; var y0 = b * BestRho; pt1.X = (int)Math.Round(x0 + input.Width * (-b)); pt1.Y = (int)Math.Round(y0 + input.Height * (a)); pt2.X = (int)Math.Round(x0 - input.Width * (-b)); pt2.Y = (int)Math.Round(y0 - input.Height * (a)); return new LineSegment2D(pt1, pt2); } Если бы проблема была только с ним, продолжал бы сам искать ошибку, но предложенный в библиотеке вариант тоже "недокручивает" градусы. Есть ли у кого предположение с чем может быть связан данный феномен, может ли быть тому причиной малый размер изображения (ширина до 200 px )? Или может существуют более удобные решения данной проблемы, при условии что быстродействие является критичным?
  11. Всем привет. Передо мной стоит задача распознать небо на фото. Использую Visual Studio и OpenCV. Из результата хорошо видно что область неба более темная, но что делать дальше? Результатом может быть просто выведение части изображения с небом в отдельный файл. Возможно я спрашиваю что то совсем простое так как новичок в opencv. И за это прошу прощения. Заранее спасибо. int main(int argc, char** argv) { Mat src, src_gray; Mat grad; int scale = 1; int delta = 0; int ddepth = CV_64F; //int c; /// Load an image src = imread("1.jpg");; GaussianBlur(src, src, Size(3, 3), 0, 0, BORDER_DEFAULT); /// Convert it to gray cvtColor(src, src_gray, CV_BGR2GRAY); /// Generate grad_x and grad_y Mat gradient_image; Mat grad_x, grad_y; Mat abs_grad_x, abs_grad_y; /// Gradient X //Scharr( src_gray, grad_x, ddepth, 1, 0, scale, delta, BORDER_DEFAULT ); Sobel(src_gray, grad_x, ddepth, 1, 0, 3, scale, delta, BORDER_REPLICATE); convertScaleAbs(grad_x, abs_grad_x); /// Gradient Y //Scharr( src_gray, grad_y, ddepth, 0, 1, scale, delta, BORDER_DEFAULT ); Sobel(src_gray, grad_y, ddepth, 0, 1, 3, scale, delta, BORDER_REPLICATE); convertScaleAbs(grad_y, abs_grad_y); pow(abs_grad_x, 2, abs_grad_x); pow(abs_grad_y, 2, abs_grad_y); add(abs_grad_x, abs_grad_y, grad); gradient_image = grad; double ret, thresh = threshold(src_gray, src_gray,50, 255, THRESH_BINARY); imshow("gray", ret); imshow("sobel", src_gray); //imshow("sobel", grad); //imwrite("image01_res2.jpg", grad); //imshow("cobel1", abs_grad_y); //imshow("cobel2", abs_grad_x); imshow("orig", src); waitKey(0); return 0; }
  12. Коллеги, суть проблемы: не удается загрузить мной созданную модель tensorFlow в opencv.dnn методом cv2.dnn.readNetFromTensorflow(weights,config) выдается ошибка распарсивания графа вида Error parsing text-format opencv_tensorflow.GraphDef: 4059:5: Unknown enumeration value of "DT_RESOURCE" for field "type". гугление приводит к рецептам вроде заморозьте граф, преобразуйте файл *.pbtxt с помощью файлов, входящих в opencv, конфиг для сети при этом скачайте по ссылке, везде рекомендации, примерно как тут: https://github.com/opencv/opencv/wiki/TensorFlow-Object-Detection-API вопрос: но ведь это-же для конкретной заранее спроектированной сети - mobilenet, rcnn, yolo и других известных, я правильно понимаю или нет? и если да, то, что делать, если моя структура самописная? это не lenet, не guglonet, не yolo, это моя собственная сетка. мне что, не удастся ее в dnn прочитать? Спасибо.
  13. OpenCV survey 2018

    Привет! Команда OpenCV приглашает вас принять участие в опросе: https://opencv.org/survey-2018.html (powered by Google Docs). Спасибо!
  14. Для системы управления складскими роботами необходимо определять погрешности монтажников при варке стеллажей. С этой целью для каждой ячейки делается фото, и сейчас живой человечек рисует в каждом таком фото желтый крестик (см. фото с красным кружочком и зеленым контуром). Пока ячеек было 2-3000, было терпимо. Сейчас планируется робосклад на 100000 ячеек, и решили делать распознавание образов (нужно определить край уголка). Образы могут быть сами разные, в т.ч. с перегороженным куском уголка (см. другие фото). Хотим использовать библиотеку OpenCV (emgucv для C#). Вопрос - в какую сторону копать? - анализ изображений (выбор отличительных признаков, морфология, поиск контуров, гистограммы) - или обнаружение объектов, в частности лиц - или еще что? Сгодятся ли для этой задачи контуры? Или, из-за игры теней и частичного перекрытия самим роботом, контуры использовать не получится? Еще чисто теоретически задача решаема для дневного освещения? Или только ночью (см. фото в аттаче)?
  15. А кто мне подскажет, как найти контуры прямоугольников в такой сложной ситуации? Выделил красным желаемый результат разделения. Вероятно, можно нейросетями (не пробовал, но уверен, что получится), но хотелось бы классическими методами OpenCV.
  16. Доброго времени суток. Интересует такая тема, как нахождение недвижимого предмета на переднем плане(т.е изначально он отсутствовал), перепробована куча вариантов и алгоритмов, но ничего стабильного так и не найдено, возможно кто то что то реализовывал похожее?
  17. Здравствуйте, пытался обучить SVM hog дескрипторами. Но в момент установки svm модели , выбрасывает исключение Находил похожие вопросы на answer opencv (Вопрос), от туда выяснил, как добавлять rho и автор советовал перейти на float массив попытался, но ситуация не изменилась Код обучения (свой картинки, 28*28) (Ошибок не возникает, файл создается ) HOGDescriptor hog = new HOGDescriptor(new Size(28,28),new Size(8,8),new Size(4,4),new Size(4,4),9); Mat trainingLabels = new Mat(); MatOfFloat temp = new MatOfFloat(); File negativeDir = new File("/home/kurenchuksergey/HogSignTrainingData/negative"); File positiveDir = new File("/home/kurenchuksergey/HogSignTrainingData/positive"); int i = -1; float[][] hogdescriptor = new float[13992][]; //13992 - image count for(File file:negativeDir.listFiles()){ Mat con = Imgcodecs.imread(file.getAbsolutePath(),Imgcodecs.CV_LOAD_IMAGE_GRAYSCALE); hog.compute(con, temp); trainingLabels.push_back(Mat.zeros(new Size(1,1),CvType.CV_32S)); } for(File file:negativeDir.listFiles()){ Mat con = Imgcodecs.imread(file.getAbsolutePath(),Imgcodecs.CV_LOAD_IMAGE_GRAYSCALE); hog.compute(con, temp); hogdescriptor[++i] = temp.toArray(); trainingLabels.push_back(Mat.ones(new Size(1,1),CvType.CV_32S)); } Mat Labels = new Mat(); trainingLabels.copyTo(Labels); Labels.convertTo(Labels,CvType.CV_32S); Mat mat = new Mat(hogdescriptor.length,hogdescriptor[0].length,CvType.CV_32FC1); for(int j = 0;j<hogdescriptor.length;j++) mat.put(i,0,hogdescriptor[i]); TrainData trainDataHog = TrainData.create(mat,Ml.ROW_SAMPLE,Labels); SVM svm = SVM.create(); svm.setType(SVM.C_SVC); svm.setKernel(SVM.RBF); svm.setDegree(0.1); // 1.4 bug fix: old 1.4 ver gamma is 1 svm.setGamma(0.1); svm.setCoef0(0.1); svm.setC(1); svm.setNu(0.1); svm.setP(0.1); svm.setTermCriteria(new TermCriteria(1, 20000, 0.0001)); svm.train(trainDataHog.getSamples(),Ml.ROW_SAMPLE,trainDataHog.getResponses()); svm.save("SVMHog"); Далее пытаюсь воспользоваться моделью (Test.java) SVM svm1 = SVM.load("SVMHog"); HOGDescriptor hog = new HOGDescriptor(new Size(28,28),new Size(8,8),new Size(4,4),new Size(4,4),9); Double rho = svm1.getDecisionFunction(0,new Mat(),new Mat()); int size = (int)(svm1.getSupportVectors().total() + 1) * svm1.getSupportVectors().channels(); float[] temp = new float[size]; svm1.getSupportVectors().get(0, 0, temp); temp[temp.length - 1] = (float)-rho; MatOfFloat vector = new MatOfFloat(temp); hog.setSVMDetector(vector); И получаю исключение (47 - строка - hog.setSVMDetector(vector); ) OpenCV Error: Assertion failed (checkDetectorSize()) in setSVMDetector, file /home/kurenchuksergey/opencv/modules/objdetect/src/hog.cpp, line 117 Exception in thread "main" CvException [org.opencv.core.CvException: cv::Exception: /home/kurenchuksergey/opencv/modules/objdetect/src/hog.cpp:117: error: (-215) checkDetectorSize() in function setSVMDetector ] at org.opencv.objdetect.HOGDescriptor.setSVMDetector_0(Native Method) at org.opencv.objdetect.HOGDescriptor.setSVMDetector(HOGDescriptor.java:306) at com.company.Test.main(Test.java:47)
  18. Добрый день, есть фотография шахматной доски расположенной под определенным углом, я нашел ключевые точки, скажите как найти нормаль к этой шахматной доске?
  19. Создаю андроид программу которая с использованием opencv(dnn) загружает модель нейронной сети Enet и производит сегментацию входного изображения. Все идет гладко до обработки полученных результатов. На языке python обработка производится довольно просто - в цикле проходимся по матрице пикселей и в зависимости от значения присваиваем ему цвет. В java все не так: после работы возвращается объект типа Mat со следующими параметрами: res = Mat [ -1*-1*CV_32FC1, isCont=true, isSubmat=false, nativeObj=0x7f3e56fff160, dataAddr=0x7f3e44806000 ] res.total() = 1036800 res.channels() = 1 res.size() = 6x1 res.dims() = 4 res.cols() = -1 res.rows() = -1 Более того если все таки достать(http://answers.opencv.org/question/175676/javaandroid-access-4-dim-mat-planes/) значения пикселей из полученного результата то они не соответствуют ожиданиям. Т.е. каждому классу соответствует число например если 5 классов то возвращаются числа от 0 до 4(так работает на python). Здесь же мне возвращаются числа вида: -26.287221908569336, -14.588539123535156, -7.386473655700684, 1.4765703678131104, 15.550891876220703. Кто нибудь знает как преодолеть данную проблему? Почему объект Mat возвращает не те значения?
  20. Добрый день, работаю на opencv версии 3.3. Мне нужно сделать следующее, есть frame получаемый из камеры (условно 1280х720), нужно на данный frame наложить второй видеоролик, уже меньшего размера (условно, 300х300). Как мне это реализовать, подскажите пожалуйста. Спасибо!! Пишу на Си. Наброски кода: CvCapture* bigframe = cvCaptureFromCAM(0); Cvcapture* smallframe=cvCreateFileCapture("1.avi"); CvMat* display; cvNamedWindow("video", CV_WINDOW_AUTOSIZE); while(1) { display=cvQueryFrame(bigframe); cvShowImage("video", display); }
  21. Здравствуйте. Есть вот такая картинка: Необходимо определить область каждой клетки, отделить ее от соседней, обвести контуром. Некоторые клетки находятся в процессе деления, их необходимо выделить особенно (другим цветом). Также надо посчитать количество клеток. Каждая клетка должна превратится в некий объект для дальнейшего анализа. Вот такая задача сегментации. Пытаюсь решать ее с помощью opencv и python. В opencv я совсем новичок, поэтому для начала попробовал алгоритм из документации для сегментации монет: https://docs.opencv.org/3.3.1/d3/db4/tutorial_py_watershed.html Но для моей картинки это не подходит, контуры плохо выделяются, получается каша. Видимо это из-за того что внутренности клетки примерно одно цвета с фоном. Пробовал играться с параметрами, но безуспешно. Добился вот такой картинки: На этом этапе и застрял. Сомневаюсь что я двигаюсь в правильном направлении. Мой вопрос: 1. Какой алгоритм подошел бы мне? 2. С чего начинать? 3. Что почитать на этот счет? Заранее благодарю.
  22. Всем привет! Вот и закончились праздники. Пока они были - успел заинтересоваться возможностями openCV. Прошу не кидаться камнями, ибо относительно недавно занялся изучением, и могу делать глупые ошибки. В общем, поигрался с мануалами (детектирование лица на видео, котики на фото). Захотел попробовать натренировать свою xml (haar cascade training) для определения, есть ли на видео рыбки (аквариумные). Правильно ли я вижу процесс тренировки? : 1. Я должен подготовить две выборки фотографий (позитивные и негативны) c (например) ~1000 и 3000 примеров соответственно ; 2. Разложить их по папкам good и bad; на уровне корня создать два файла: good.dat и bad.dat 3. Привожу к общему формату положительные : opencv_createsamples.exe -info something\Good.dat -vec samples.vec -w 20 -h 20 4. Создаю финальный каскад xml: opencv_traincascade.exe -data haarcascade -vec samples.vec -bg something\Bad.dat -numStages 16 -minhitrate 0.999 -maxFalseAlarmRate 0.4 -numPos 200 -numNeg 500 -w 20 -h 20 -mode ALL -precalcValBufSize 1024 -precalcIdxBufSize 1024 на втором пункте у меня возникают некоторые вопросы: - какого размера должны быть good и bad фотографии? Нужно делать их на профессиональный фотоаппарат, или хватит камеры телефона? Должен ли быть у них одинаковый размер? - если в файле bad.dat, согласно статьи с хабра, должно быть просто перечисление фотографий, то в файле good.dat, цитирую "Кроме пути должно быть указанно положение рассматриваемого объекта и его размер.". если я сделаю несколько фотографий рыбки в аквариуме, мне нужно будет потом эти фотографии в ручную обрезать, найти у каждой фотографии координаты рыбки и указать? Пока больше вопросов нет. Искал по форуму ответы - не смог найти. Заранее спасибо!)
  23. Доброго времени суток.Помоги написать программу на Питоне 3.6, либо на ++.Которая бы: детектировала лицо (сделано),далее находила AU's (ЕД, Пол Экман),на основе этих AU'sов предполагала эмоцию.На счет кода почти неважно чей он будет (e.c, copypast github) и по какой концепции будет реализован, главное чтобы можно было разобраться с распознаванием AU'sов.Есть пару проектов с гита по теме, но у меня они плюются ошибками:) Дедлайн по теме 15 января.
  24. Добрый день! Есть обычное трафик видео. Задача состоит в том чтобы на выходе получить сжатое видео в котором объекты накладываются большим количеством на статический задний фон. Чтобы накладывать объекты большим количеством надо каждый объект (его координаты и значения пикселей) записывать в отдельный массив, либо создавать маски numpy для каждого, и затем уже накладывать. Пытаюсь через контуры, фильтрую изображение, получаю белые блобы, нахожу контуры, но не понимаю как данные каждого контура записывать в отельные массивы. Вот кусочек кода начиная после нахождения контуров: # Находим координаты контура mask = np.zeros(thresh.shape,np.uint8) cont2 = cv2.drawContours(mask,contours,0,255,-1) pixelpoints = np.transpose(np.nonzero(mask)) # Находим значения пикселей for k in range(0,(len(pixelpoints))): a = (frame[pixelpoints[k][0]][pixelpoints[k][1]]) pix_list.append(a)
  25. Contours detection

    Всем привет, Для удобства работы с результатами semantic segmentation хочу векторизовать label map. Т.е. у нас есть картинка, где каждому пикселю соответствует номер класса и мы хотим все такие блобы закодировать полигонами, соответствующими границам объектов. Но, я внезапно обнаружил, что cv::findContours() работает только с бинарными изображениями (т.е. там только 2 лэйбла 'фон'/'не фон'). Теоретически я могу свести задачу к предыдущей, довольно просто генерируя для каждого класса соответствующую бинарную маску. Таким образом у меня получится куча контуров, но вот их иерархия вложенности, которая строится внутри findContours, будет невалидной, и придется делать какие-то дополнительные (не самые вычислительно-дешевые) телодвижения для того, чтобы определить корректный порядок отрисовки вложенных полигонов. Может быть кто-то сталкивался с подобной задачей и знает уже существующую имплементацию для конвертации label map'ов в полигоны для небинарных масок, с поддержкой древовидных иерархий?
×