3

Jpeg 画像 (その座標 (x,y)) を円柱座標に変換したいと思います。

これを直接実行できるopencvの関数はありますか? または、opencv のどの関数を使用して独自の関数を作成できますか??

2 次元座標、3 次元座標、円筒座標の間で混乱しています。誰かがこれについて簡単に議論できますか?

2D を 3D に変換する数学アルゴリズムはありますか? 2次元から円柱座標? 3D から円筒座標へ?

このトピックに関する以前の投稿を読みましたが、理解できません..

画像処理のコースを受講したことはありませんが、急いで本を読んでいます.経験と他のプログラマーのコードを勉強することで学びます..ソースコードは非常に高く評価されます..

みんなのおかげで、私の初歩的な投稿でごめんなさい、、

4

1 に答える 1

7

2D 領域では、極座標があります。OpenCV には、デカルト座標と極座標の間で変換するための 2 つの便利な関数cartToPolarpolarToCartがあります。これらの関数を使用する良い例がないように思われるので、cartToPolar関数を使用して作成しました。

#include <opencv2/core/core.hpp>
#include <iostream>

#include <vector>

using namespace cv;
using namespace std;

int main(int argc, char** argv)
{
    vector<double> vX;
    vector<double> vY;

    for(int y = 0; y < 3; y++)
    {
        for(int x = 0; x < 3; x++)
        {
            vY.push_back(y);
            vX.push_back(x);
        }
    }

    vector<double> mag;
    vector<double> angle;

    cartToPolar(vX, vY, mag, angle, true);

    for(size_t i = 0; i < mag.size(); i++)
    {
        cout << "Cartesian (" << vX[i] << ", " << vY[i] << ") " << "<-> Polar (" << mag[i] << ", " << angle[i] << ")" << endl;
    }

    return 0;
}

円筒座標は、極座標の 3D バージョンです。以下は、円筒座標を実装する方法を示す小さなサンプルです。どこで 3D z 座標を取得するのかわからないので、任意にしました (例x + y: ):

Mat_<Vec3f> magAngleZ;

for(int y = 0; y < 3; y++)
{
    for(int x = 0; x < 3; x++)
    {
        Vec3f pixel;
        pixel[0] = cv::sqrt((double)x*x + (double)y*y); // magnitude
        pixel[1] = cv::fastAtan2(y, x);                 // angle
        pixel[2] = x + y;                               // z
        magAngleZ.push_back(pixel);
    }
}

for(int i = 0; i < magAngleZ.rows; i++)
{
    Vec3f pixel = magAngleZ.at<Vec3f>(i, 0);
    cout << "Cylindrical (" << pixel[0] << ", " << pixel[1] << ", " << pixel[2] << ")" << endl;
}

画像のスティッチングに興味がある場合は、OpenCV が提供するstitching.cppStitching_detailed.cppのサンプルをご覧ください。

編集:円筒投影
に関するこれらのリソースが役立つ場合があります。

コンピュータ ビジョン: モザイク
なぜモザイクなのか?
不変機能を使用したパノラマ画像の自動スティッチ
フル ビューのパノラマ画像モザイクと環境マップの作成

于 2011-12-17T05:08:57.710 に答える