簡體   English   中英

檢索CV_32FC3 CvMat的元素?

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

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