2014-12-26 2 views
0

эй, ребята! Я пытаюсь обрабатывать большие данные непрерывно в OpenCV. Вот мой код:Как обрабатывать большие данные непрерывно в OpenCV

vector<Point2f> up_imagePoints; 
vector<Point2f> left_imagePoints; 
vector<Point2f> right_imagePoints; 

Mat frame1_silhouette; 
Mat frame2_silhouette; 
Mat frame3_silhouette; 

Mat frame1_reconstruction; 
Mat frame2_reconstruction; 
Mat frame3_reconstruction; 

for (int i = 0; i < 16777216; ++i){ 
     //check point range 
     if (up_imagePoints[i].x >= col_bound || up_imagePoints[i].y >= row_bound) { 
      coor_test = 1;} 
     else if (left_imagePoints[i].x >= col_bound || left_imagePoints[i].y >= row_bound) { 
      coor_test = 1;} 
     else if (right_imagePoints[i].x >= col_bound || right_imagePoints[i].y >= row_bound) { 
      coor_test = 1;} 
     //check silhouette 
     if (coor_test == 0) { 
      if (frame1_silhouette.at<uchar>((cvFloor(up_imagePoints[i].x)),(cvFloor(up_imagePoints[i].y))) == 255) 
       value_test = 1; 
      else if (frame2_silhouette.at<uchar>((cvFloor(left_imagePoints[i].x)),(cvFloor(left_imagePoints[i].y))) == 255) 
       value_test = 1; 
      else if (frame3_silhouette.at<uchar>((cvFloor(right_imagePoints[i].x)),(cvFloor(right_imagePoints[i].y))) == 255) 
       value_test = 1; 

      if (value_test == 0) { 
       frame1_reconstruction.at<uchar>((cvFloor(up_imagePoints[i].x)),(cvFloor(up_imagePoints[i].y))) = 255; 
       frame2_reconstruction.at<uchar>((cvFloor(left_imagePoints[i].x)),(cvFloor(left_imagePoints[i].y))) = 255; 
       frame3_reconstruction.at<uchar>((cvFloor(right_imagePoints[i].x)),(cvFloor(right_imagePoints[i].y))) = 255;} 
      } 

     value_test = 0; 
     coor_test = 0; 
     cout<<"round "<<i<<endl; 
     } 

Размеры up_iamgePoints, left_imagePoints и right_imagePoints являются 1x16777216. Они содержат координаты изображений. Размеры framex_silhouette и framex_reconstruction являются 480x640

Есть три шага:

  1. проверки того, являются ли координаты x_imagePoints в пределах диапазона: col_bound (640) и row_bound (480)
  2. проверки ли те же позиции из framex_silhouette все 255
  3. применять 255 на позиции от шага 2 к framex_reconstruction

программа всегда терпит неудачу в другое состояние, например, когда i == 1900566

Означает ли какой-либо орган, как обрабатывать большие данные непрерывно в OpenCV без ошибок?

+0

для какого индекса используется 'z'? почему вы никогда не инициализируете «я»? – berak

+0

@berak, я прочитал код для четкого объяснения. 'x', 'y', 'z'indexes используются для объяснения большого вокселя – oilpig

ответ

0

У вас есть изображения 480 (строк) x 640 (cols), но вы пытаетесь получить значение Mat от Mat.at<uchar>(colNumber, rowNumber). В какой-то момент Mat::at() выдает ошибку, потому что вы попытаетесь получить значение, которое находится за пределами Mat границ.

+0

Я проверил диапазон координат до этого. Если координаты находятся за пределами границ Mat, coor_test станет равным 1. – oilpig

+0

Но вы проверяете их неправильно: координаты, которые вы используете как ROWS, которые вы проверяете для границ COLUMNS, и их используете как COLUMNS, которые вы проверяете для границ ROWS. Чтобы получить значение из Mat, вы должны использовать систему координат ROWS, COLS. То, как вы получаете ошибки в разных местах, потому что многие из этих обратных координат будут правильными в манере границ Mat. – Amadeusz

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