ベクトルをcv :: Matに変換しようとしていますが、これは2次元行列の各要素が3次元の行列(640 * 480) CV_32FC3(それぞれx、y、zを表す3つのチャネル)。<cv::Point3f>をCV_32FC3型のcv :: Matに変換する
n_rows = 480 and n_cols=640
xyzMap = cv::Mat(xyzBuffer).reshape(3, 480);
はまた、アクセス違反の例外
vector<cv::Point3f> xyzBuffer;
で終わり、なぜ私は再形成のための他の方法を使用する場合、わからない:
cv::Mat xyzBuffMat = cv::Mat(xyzBuffer.size(), 1, CV_32FC3);
for (int i = 0; i < xyzBuffer.size(); i++) {
xyzBuffMat.at<float>(i, 0, 0) = xyzBuffer[i].x;
xyzBuffMat.at<float>(i, 0, 1) = xyzBuffer[i].y;
xyzBuffMat.at<float>(i, 0, 2) = xyzBuffer[i].z;
}
xyzMap = xyzBuffMat.reshape(3, 480);
色が奇妙なのは、通常、チャネルの順序が間違っていることを意味します。あなたのベクトルの順序は何ですか? RGBRGBRGB ..? OpenCVはBGRの順序付けを使用するので、後で 'cvtColor(xyzMap、xyzMap、CV_RGB2BGR);'が必要になるかもしれません。さらなる提案のためにサンプル画像をアップロードしてください。 – Micka