![](/img/trans.png)
[英]converting vector<cv::Point3f> to cv::Mat of type CV_32FC3
[英]Retrieve elements of a CV_32FC3 CvMat?
我正在通過調用創建一個CvMat結構
cvCreateMat(1,1,CV_32FC3);
這個結構由后續的OpenCV函數調用填充,並用三個值填充它(據我所知,這是一個1x1數組,附加深度為3)。
那么如何才能訪問這三個值呢? 正常的電話
CV_MAT_ELEM(myMat,float,0,0)
不會做這個工作,因為它只期望數組維度索引而不是它的深度。 那么我怎樣才能獲得這些價值呢?
謝謝!
訪問cv :: Mat的一般方法是
type value=myMat.at<cv::VecNT>(j,i)[channel]
對於你的情況:
Mat mymat(1,1,CV_32FC3,cvScalar(0.1,0.2,0.3));
float val=mymat.at<Vec3f>(0,0)[0];
所有類型都使用類cv :: VecNT定義,其中T是類型,N是向量元素的數量。
CV_32FC3
是32位浮點數的三通道矩陣。 您可以通過使用3個浮點數並使用CV_MAT_ELEM
聲明struct元素來訪問每個通道。 例如:
typedef struct element {
float cn1;
float cn2;
float cn3;
} myElement;
myElement data[N] = ...;
CvMat mat = cvMat(1, 1, CV_32FC2, data);
float channel1 = CV_MAT_ELEM(mat, float, 0, 0).cn1;
float channel2 = CV_MAT_ELEM(mat, float, 0, 0).cn2;
float channel3 = CV_MAT_ELEM(mat, float, 0, 0).cn3;
編輯:
訪問每個通道的另一種方法是使用底層的ptr
結構:
mat.ptr<float>(x, y) [channel];
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.