[英]converting vector<cv::Point3f> to cv::Mat of type CV_32FC3
我試圖將矢量轉換為cv :: Mat,其中它是2D矩陣(640 * 480),具有3個通道,2D矩陣中的每個元素都是CV_32FC3類型(三個通道分別指x,y和z) )。
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);
我認為你填寫的矩陣不正確。 不應該需要調整大小。 如果查看DepthCamera.cpp中的方法removeNoise(),則使用以下約定分配(x,y,z)坐標值:
xyzMap.at<cv::Vec3f>(y, x)[0] = [x value];
xyzMap.at<cv::Vec3f>(y, x)[1] = [y value];
xyzMap.at<cv::Vec3f>(y, x)[2] = [z value];
希望能解決問題。
以下是為我工作,但顏色是如此奇怪:
xyzMap = cv::Mat(xyzBuffer, true).reshape(3, 480);
注意true
旗幟。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.