2017-07-31 22 views
1

このライブラリのJavaCVを使用しています。org.bytedeco.javacpp.opencv_coreは、バージョン1.3.2でgradle依存関係です。findChessboardCornersを呼び出すときにコーナーの座標を取得

私はチェス盤の角を取得するには、このコードを実行しているが、私はトラブルが検出されたコーナーのそれぞれに座標を取得しています

Mat imageCorners = new Mat(); 
    Size boardSize = new Size(9,6); 
    boolean found = findChessboardCorners(capturedFrame,boardSize,imageCorners,CV_CALIB_CB_ADAPTIVE_THRESH+CV_CALIB_CB_NORMALIZE_IMAGE); 

しかし、この方法は、検出した54のコーナー、店舗行列のためにコーナーはちょうど54x1のサイズを持っています。

if (found) { 
    FloatRawIndexer sI = imageCorners.createIndexer(); 
    for (int y = 0; y < imageCorners.rows(); y++) { 
     for (int x = 0; x < imageCorners.cols(); x++) { 
     logger.debug("Row: " + y + " Column " + x); 
     logger.debug(sI.get(y, x)); 
     } 
    } 
    } 

ログファイルは次のようになります。

14:57:50.057 [main] DEBUG JavaCVTransformation2 - Row: 0 Column 0 
14:57:50.059 [main] DEBUG JavaCVTransformation2 - 164.02007 
14:57:50.059 [main] DEBUG JavaCVTransformation2 - Row: 1 Column 0 
14:57:50.059 [main] DEBUG JavaCVTransformation2 - 224.07906 
14:57:50.059 [main] DEBUG JavaCVTransformation2 - Row: 2 Column 0 
14:57:50.059 [main] DEBUG JavaCVTransformation2 - 283.54288 
14:57:50.059 [main] DEBUG JavaCVTransformation2 - Row: 3 Column 0 
14:57:50.059 [main] DEBUG JavaCVTransformation2 - 343.4154 
14:57:50.060 [main] DEBUG JavaCVTransformation2 - Row: 4 Column 0 
14:57:50.060 [main] DEBUG JavaCVTransformation2 - 402.7718 
14:57:50.060 [main] DEBUG JavaCVTransformation2 - Row: 5 Column 0 
14:57:50.060 [main] DEBUG JavaCVTransformation2 - 462.38278 
14:57:50.060 [main] DEBUG JavaCVTransformation2 - Row: 6 Column 0 
14:57:50.060 [main] DEBUG JavaCVTransformation2 - 522.2342 
14:57:50.060 [main] DEBUG JavaCVTransformation2 - Row: 7 Column 0 
14:57:50.060 [main] DEBUG JavaCVTransformation2 - 580.99805 
14:57:50.061 [main] DEBUG JavaCVTransformation2 - Row: 8 Column 0 
14:57:50.061 [main] DEBUG JavaCVTransformation2 - 640.7774 
14:57:50.061 [main] DEBUG JavaCVTransformation2 - Row: 9 Column 0 
14:57:50.061 [main] DEBUG JavaCVTransformation2 - 151.04564 

それは完全に正常に動作描くので、どこかに各コーナーには、2点の座標があるように持って、私は思います。

drawChessboardCorners(capturedFrame, boardSize, imageCorners, found); 

findChessboardCorners()を呼び出すとき隅の座標を取得する方法はありますか?

+0

++出力 'imageCorners''が' 'ベクトルであります '' '' imageCorners [i] .x''と '' imageCorners [i] .y''でアクセスできます。それはあなたを助けますか? – Phann

答えて

0

私は方法findChessboardCornersの解決策を見つけませんでしたが、別の方法が見つけられました。svFindChessboardCornersからimport static org.bytedeco.javacpp.opencv_calib3d.*;が働いていました。

IplImage iplImage = frameConverter.convertToIplImage(capturedFrame); 

    CvSize boardSize = new CvSize(9, 6); 
    float[] corners = new float[108]; 
    int found = cvFindChessboardCorners(iplImage, boardSize, corners); 

この方法は、第1ポイントにアクセスすると、このようになり、コーナーがフロートアレイ上の座標格納する:Cで

Point2f srcp1 = new Point2f(corners[0], corners[1]); 
関連する問題