2017-01-11 9 views
1

Это мой код до сих пор, но я получаю ошибки как OpenCV Error: One of arguments' values is out of range (index is out of range) in cvPtr2D, file ..\..\..\..\opencv\modules\core\src\array.cpp, line 1797 Exception in thread "main" java.lang.RuntimeException: ..\..\..\..\opencv\modules\core\src\array.cpp:1797: error: (-211) index is out of range in function cvPtr2D<JAVA> Как принимать значения RGB пиксельные весь экран в OpenCV

Любые предложения о том, как это исправить? Любая помощь оценена;)

cvNamedWindow("OpenCV", 0); 
    while(true) 
    { 
     IplImage img = cvQueryFrame(cvCreateCameraCapture(0)); 
     CvScalar[] s = new CvScalar[img.height()*img.width()+2]; 
     for(int i = 0;i<=img.width();i++) 
     { 
      for(int j = 0;j<=img.height();j++) 
      { 
       s[j] = cvGet2D(img, i, j); 
      } 
     } 
     cvShowImage("OpenCV", img); 
     cvWaitKey(33); 
    } 

ответ

0

cvGet2D() ожидает ряд перед колонке. И индекс основан на 0, поэтому ваши циклы просто за пределами границ. И s должен быть 2D-массивом, поэтому вы не будете переписывать свои данные. Попробуйте следующее:

CvScalar[][] s = new CvScalar[img.height()][img.width()]; 
for (int i = 0; i < img.height(); i++) { 
    for (int j = 0; j < img.width(); j++) { 
     s[i][j] = cvGet2D(img, i, j); 
    } 
} 
+0

Это работает, но мое приложение работает немного медленнее, чем обычно. Есть ли способ увеличить скорость моего приложения? – kimchiboy03

+0

Это совершенно отдельный вопрос и очень широкий, если можно так выразиться. Когда вы можете сузить его до конкретной проблемы с помощью определенной части кода, опубликуйте ее как новый вопрос. – shmosel

+0

Спасибо @shmosel =) – kimchiboy03