簡體   English   中英

轉換矢量 <cv::Point3f> 到cv :: Mat的類型CV_32FC3

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM