3

私はしばらくの間、ビリヤード台の画像を任意の角度から撮影し、コーナーの 4 つの座標ペア (x、y) を見つけ、画像を回転/ワープして、結果の画像にテーブルのみが含まれるようにしようとしています。鳥瞰図。このタスクを達成するために JavaCV を使用しています。これまでのところ、以下に示すようにテーブルの 4 つのコーナーを正常に計算するコードを作成しました (4 つのコーナーに半径 25 の赤い cvCircles をコーディングしました)。

ここに画像の説明を入力

4 つのコーナーを見つけた後:
コーナー 1 (右下) X: 3234 Y: 1858
コーナー 2 (左下) X: 0 Y: 1801
コーナー 3 (右上) X: 2722 Y: 1069
コーナー 4 (左上) X: 523年:1030年

これを達成するために、cvFindHomography を使用してから cvWarpPerspectve を使用しようとしました。私のコードは以下にあります:

// Initialize Table Corners as Image Coordinates
    float[] aImg = {
        corners.get(0).x(), corners.get(0).y(), // BR X: 3234 Y: 1858
        corners.get(1).x(), corners.get(1).y(), // BL X: 0    Y: 1801
        corners.get(2).x(), corners.get(2).y(), // TR X: 2722 Y: 1069
        corners.get(3).x(), corners.get(3).y()  // TL X: 523  Y: 1030
    };

// Initialize World Coordinates (Are these even correct? How do I determine these?)
    float[] aWorld = {
        0.0f, 0.0f,
        0.0f, 1.0f,
        1.0f, 0.0f,
        1.0f,1.0f
    };

// Create 3x3 Homography Matrix
    CvMat homography = cvCreateMat(3, 3, opencv_core.CV_32FC1);
    opencv_imgproc.cvGetPerspectiveTransform(aImg, aWorld, homography);
    System.out.println(homography.toString());

// Create imgWarped and Warp Perspective
    IplImage imgWarped = cvCreateImage(cvGetSize(img), 8, 3);
    opencv_imgproc.cvWarpPerspective(img, imgWarped, homography, opencv_imgproc.CV_INTER_LINEAR, CvScalar.ZERO);

// Create Canvas and Display Image
    CanvasFrame canvas = new CanvasFrame("Warped Image");
    canvas.showImage(imgWarped);
    canvas.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


私が取得している 3x3 ホモグラフィ マトリックスは次
のとおり
です


**残念ながら、結果は何も含まれていない真っ黒な画像になります。私はこれに間違ってアプローチしていますか? アドバイス、コード、疑似コードなどは大歓迎です!

読んでいただきありがとうございます。**

4

0 に答える 0