#android #opencv #xamarin #monodroid
Использую OpenCV4Android версии 2.4.11 (разработка ведется под Xamarin.Android). Я пытаюсь найти Границы прямоугольного объекта(лист бумаги формата А4) посредством OpenCV. Пытаюсь реализовать следующий алгоритм: Canny edge -> Largest contour -> largest rectangle -> find corners -> perspective change. Вот мой код: using(Bitmap _img = BitmapFactory.DecodeFile(App._file.Path)) { if (_img != null) { m = new Mat(); grayM = new Mat(); Utils.BitmapToMat(_img, m); //apply filter Imgproc.Canny(m, m, 100, 100, 3, true); //gaus Blur Imgproc.GaussianBlur(m, m, new Org.Opencv.Core.Size(5, 5), 5); //list for contours List < MatOfPoint > Contours = new List < MatOfPoint > (); Mat hierarcy = new Mat(); //our method to find contours,via filling List(Contours) Imgproc.FindContours(m, Contours, hierarcy, Imgproc.RetrList, Imgproc.ChainApproxSimple); System.Console.WriteLine(Contours.Count + " Contours founded"); //Dont know why,but Contours list is always empty(no values) if (Contours.Count != 0) { MatOfPoint temp = Contours[0]; } } И тут я застрял, потому что не понимаю, почему FindContours не заполняет значениями мой список List(всегда пустой). Перепробовал наверное все,все равно не хочет. В чем же может быть проблема? Так же,довольно странная проблема: Исходное изображение #1 если я использую только такие методы, как Imgproc.Canny и Imgproc.GaussianBlur , то тогда результат выглядит примерно так(контуры обведены отлично): В противном случае,а именно когда я использую метод Imgproc.FindContours,то результат выглядит гораздо хуже,ежели без использования самого метода(нахождения контуров),к тому же List он не заполняет,т.е. лист остается пустым,после инициализации: Другое исходное изображение #2: без использования метода Imgproc.FindContours(только Imgproc.Canny вместе с Imgproc.GaussianBlur) : а здесь уже применяется FindContours метод : Все же не могу понять,где моя ошибка. Может кто то подсказать\объяснить что я делаю не так,а так же как мне достичь моей цели? Заранее благодарю! PPS позже выложу результаты альтернативных алгоритмов(к примеру,через HoughLinesP или FeatureDetector.Fast)
Ответы
Ответ 1
После того как было потрачено куча времени,я пришел к выводу,что это просто напросто Баг, т.к. скорей всего не корректно спортировался этот метод(а что именно не так встало,не понятно). Решением проблемы может быть: Установка новой версии(к примеру OpenCV 3.0.0). Заимплементить Java Wrapper класс,который можно будет подключить к проекту и успешно юзать(через мир Java'ы). Такие вот дела. PS в нативной форме все работает как часы.
Комментариев нет:
Отправить комментарий