2015-10-06 2 views
1

Я хочу вырезать 16 штук с изображения. Я использую OpenCV и метод submat.OpenCV, вырезанные кусочки с изображения

List<Mat> listOfPieces = new ArrayList<Mat>(); 

    Mat mat = new Mat(); 
    Utils.bitmapToMat(bitmap1, mat); 

    int x = mat.cols()/4; 
    int y = mat.rows()/4; 

    for(int i=0; i<4; i++){ 
     for(int j=0; j<4; j++){    
      Rect roi = new Rect(i*x ,j*y, (i+1)*x, (j+1)*y); 
      Mat submat = mat.submat(roi); 
      listOfPieces.add(submat); 
     } 
    } 

Я получаю эту ошибку:

10-06 12:42:19.842: E/cv::error()(18420): OpenCV Error: Assertion failed (0 <= roi.x && 0 <= roi.width && roi.x + roi.width <= m.cols && 0 <= roi.y && 0 <= roi.height && roi.y + roi.height <= m.rows) in cv::Mat::Mat(const cv::Mat&, const Rect&), file /hdd2/buildbot/slaves/slave_ardbeg1/50-SDK/opencv/modules/core/src/matrix.cpp, line 323 

Я проверил мой ценный roi, если это не больше, чем размеры мата. Этот код падает во втором цикле for.

+0

гляньте [здесь] (http://stackoverflow.com/questions/32870430/how- к разделяю-ан-OpenCV-мат-в-прямоугольно-подобластей/32870595 # 32870595). Это C++, но его можно легко портировать. – Miki

+0

Вы должны использовать конструктор 'Rect', который принимает верхние левые и нижние правые' Point ' – Miki

+0

Спасибо, это помогло. –

ответ

0

Вы должны использовать Rectconstructor, который принимает два Point, верхний левый и нижний правый:

Rect roi = new Rect(new Point(i*x ,j*y), new Point((i+1)*x, (j+1)*y)); 
Смежные вопросы