4

一見簡単に見えます。結局のところ、std または openCV ベクトルは、次のように簡単に Matrix に変換できることがわかっています。

vector<Point> iptvec(10);
Mat iP(iptvec);

逆は openCV cheatSheet で提案されています:

vector<Point2f> ptvec = Mat_ <Point2f>(iP);

ただし、注意点が 1 つあります。行列には 1 つの行または 1 つの列のみを含める必要があります。任意の行列を変換するには、形状を変更する必要があります。

int sz = iP.cols*iP.rows;
vector<Point2f> ptvec = Mat <Point2f>(iP.reshape(1, sz));

そうしないと、エラーが発生します。

*OpenCV エラー: アサーションに失敗しました (dims == 2 && (サイズ [0] == 1 || サイズ [1] == 1 || サイズ [0] * サイズ [1] == 0)) 作成、ファイル /ホーム/.../OpenCV-2.4.2/modules/core/src/matrix.cpp、1385行目...

4

1 に答える 1

1

2dim ベクトルを作成し、各行を埋めます。例えば:

Mat iP=Mat::zeros(10, 20, CV_8UC1);
vector<vector<int>> ptvec;
for (int i = 0; i < iP.rows; i++)
{
    vector<int> row;    
    iP.row(i).copyTo(row);
    ptvec.push_back(row);
}
于 2013-05-10T07:09:00.940 に答える