使用Tl()对边界框进行排序:Opencv Android

时间:2015-04-26 23:09:18

标签: java android opencv contour bounding-box

我试图用y轴和x轴对边界框进行排序,但是从tl()。x和tl()。y中找到的结果有点令人困惑,经过大量的工作我无法找到文档中的任何内容以下是一些结果请看一下。我希望它们的顺序为1到30

CODE:

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

编辑:

这是裁剪区域,上面显示的坐标是这些框。 enter image description here

原始图片:

enter image description here

1 个答案:

答案 0 :(得分: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