2017-01-22 8 views
0

私はfrcチームでもっと複雑な方法でカメラを使用しようとしており、JavaでOpenCVを使い始めました。私はカメラを介して表示される色を検出するために色の値を取得したいので、すべてのピクセルをループしています。OpenCV - Javaでピクセルをループする方法は?

.put(col, row, valueToPut).get(col, row)の方法を使用してピクセルを取得できました。しかし、私たちのroborioは遅すぎるので、私はすべてのピクセル(それらのうちの640x480)をループすることはできません。私はまた、.put.getの方法がかなり遅いことも知っています。

私はそれをより速くするために何をすべきか知っていますか?

答えて

0

opencv MatからJavaプリミティブ配列に行または行全体を取得するには.get(col、row)を使用し、その配列に対して何らかの操作を行い、putメソッドを使用してJava配列を戻します。 opencv行列。この方法では、個々のピクセルアクセスよりもはるかに高速です。すなわち、opencvのgetおよびputメソッドへの呼び出しを減らすことは、より良い性能をもたらす。

Mat A ; 
A.convertTo(A,cvType.CV_16SC3); 
int size = (int) (A.total() * A.channels()); 
short[] temp = new short[size]; 
A.get(0, 0, temp); 
for (int i = 0; i < size; i++) 
    temp[i] = (short) (temp[i]/2); 
C.put(0, 0, temp); 
+0

私はこれを実行してみたとき、私はスレッド「スレッド0」java.lang.UnsupportedOperationExceptionがで例外を取得:マットのデータ型は互換性がありません:answer.Youが短いデータに自分の画像の種類を変換する必要があります編集16 – user2350459

+0

この特定の例のためにピクセルアクセスを行う前に入力してください。opencvのデータ型について詳しく知りましょう。 – hariprasad

+0

ああ、ありがとう!私は実際にバイト配列を使用してそれを動作させました – user2350459

関連する問題