1

私は OpenCV を使用しています。私のプロジェクトの一部は 3d キャリブレーションです。OpenCV のcv::findChessboardCorners機能を使用してそれを行っていますが、うまく機能します。私の問題は、チェス盤の見つかった部分に基づいて画像をトリミングする必要があることです。私のチェス盤の角の見つかった点が ( boardSize( 2*3 )) であるとしましょう:

     [384.87457, 275.93411; 402.59073, 305.37384; 420.99899, 335.61783; 366.1167, 277.35107; 
      384.15289, 308.0141; 402.59592, 339.44702; 346.16739, 279.11893; 364.19324, 310.56906;  
      383.36844, 343.98239; 324.71078, 281.3793; 343.24969, 313.93167;362.28644, 348.54108]

ここにコーナーの位置を与える私のコードの一部があります:

  if( (cv::findChessboardCorners(img,boardSize, imageCorners))){
    cv::drawChessboardCorners(img,boardSize,imageCorners,true);
    std::cout<<imageCorners[0] <<std::endl;
    std::cout<<imageCorners[((boardSize.height)*(boardSize.width))-1] <<std::endl;
    std::cout << imageCorners << std::endl;
    cv::Rect  myroi (imageCorners[0],imageCorners[((boardSize.height)*(boardSize.width))-1]);
    cv::imshow("Part ", img(myroi));

}

問題は、関心のある領域の長方形しか得られないことです。 ここに画像の説明を入力

上記のように、青い領域は私の関心領域ですが、赤い四角形は私が得たものです。この問題を解決するにはどうすればよいですか?

4

2 に答える 2

0

そのため、チェス盤の外側の角から画像を切り取りたいと考えています。最小の境界 ROI (対象の四角形)を取得するには、頂点リストの MinX、MaxX、MinY、および MaxY を見つける必要があります。

だからあなたの答えは簡単です:

TopLeft = (MinX, MinY)
BotRight = (MaxX, MaxY)

ROI = (TopLeft, BotRight)
于 2013-06-05T16:52:59.570 に答える