2015-04-26 4 views
0

Я пытаюсь сортировать ограничивающие поля с осью y, а затем ось x, но результаты, которые я нахожу из tl(). X и tl(). Y немного запутывают и после много работы, которую я не мог найти в документации. Вот некоторые результаты, пожалуйста, взгляните. Я хочу, чтобы они были в порядке от 1 до 30Сортировка прямоугольников с Tl(): Opencv Android

КОД:

m = Utils.loadResource(MainActivity.this, R.drawable.sheet1, Highgui.CV_LOAD_IMAGE_COLOR); 
//Mat original = Utils.loadResource(MainActivity.this, R.drawable.sheet1, Highgui.CV_LOAD_IMAGE_COLOR); 
Bitmap bm = Bitmap.createBitmap(m.cols(), m.rows(),Bitmap.Config.ARGB_8888); 

Imgproc.cvtColor(m, m, Imgproc.COLOR_BGR2GRAY); 
Imgproc.medianBlur(m, m,3); 
Imgproc.threshold(m, m, 0, 255, Imgproc.THRESH_OTSU); 
Core.bitwise_not(m, m); 
Imgproc.dilate(m, m, Imgproc.getStructuringElement(Imgproc.MORPH_RECT, new Size(1,118))); 

java.util.List<MatOfPoint> contours = new ArrayList<MatOfPoint>();     
Imgproc.findContours(m.clone(), contours, new Mat() ,Imgproc.RETR_EXTERNAL , Imgproc.CHAIN_APPROX_SIMPLE); 
Rect rect = Imgproc.boundingRect(contours.get(35));       
Toast.makeText(MainActivity.this, "TL:"+rect.tl()+"BR:"+rect.br(), Toast.LENGTH_LONG).show(); 

enter image description here

EDIT:

Это обрезается область и координаты, показывающие выше этих коробок. enter image description here

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

enter image description here

+0

Пожалуйста, предлагайте немного больше фона на сценарий и сузить область вашего вопроса - что , в частности, вы смущены/вам нужна помощь? – snickers10m

+0

Если вы также можете указать, в каких областях документации вы искали помощь по вашей проблеме, это может помочь нам быстрее получить ответ. – snickers10m

+0

@ snickers10m Я попытался найти ограничивающие поля –

ответ

0

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

boolean isLessThan(bboxA,bboxB,unsigned int tolerance = 100) { 

    if (bboxA.tl().x + tolerance < bboxB.tl().x); 
     return true; 
    if (bboxB.tl().x + tolerance < bboxA.tl().x); 
     return false; 
    return (bboxA.tl().y < bboxB.tl().y); 

    } 

(Или жёстко tolerance)

+0

Что такое терпимость? –

+0

@HelpingDesk Для аналогичного x (смещение с левой стороны) считается, что координата y. Чтобы определить «аналогичный», вы используете порог: если их разность их координат x находится в пределах этого порога, вам нужно проверить координату y.Я называю этот порог «толерантность». – Antonio

 Смежные вопросы

  • Нет связанных вопросов^_^