使用CvMat
類型時,數據類型對於保持程序運行至關重要。如何確定CvMat的數據類型
例如,根據您的數據的類型是否爲float
或unsigned char
,你會選擇以下兩種命令之一:
cvmGet(mat, row, col);
cvGetReal2D(mat, row, col);
是否有一個通用的方法呢?如果將錯誤的數據類型矩陣傳遞給這些調用,則會在運行時崩潰。這成爲一個問題,因爲我定義的函數正在通過幾種不同類型的矩陣。
如何確定矩陣的數據類型,以便隨時訪問其數據?
我嘗試使用「type()」函數。
CvMat* tmp_ptr = cvCreateMat(t_height,t_width,CV_8U);
std::cout << "type = " << tmp_ptr->type() << std::endl;
這不編譯,說"term does not evaluate to a function taking 0 arguments"
。如果我的話type
後取出支架,我得到一個類型1111638032
編輯最小的應用程序,重新產生此...的
int main(int argc, char** argv)
{
CvMat *tmp2 = cvCreateMat(10,10, CV_32FC1);
std::cout << "tmp2 type = " << tmp2->type << " and CV_32FC1 = " << CV_32FC1 << " and " << (tmp2->type == CV_32FC1) << std::endl;
}
輸出:tmp2 type = 1111638021 and CV_32FC1 = 5 and 0
看,這是我的想法,但類型的結果是1111638032,這是完全錯誤的.CV_8U應導致整數爲0.這是我的困惑來自的地方。爲什麼這種類型會出錯? – Chris
如果你用'CV_8UC1'創建墊子怎麼辦?您嘗試創建的墊子的大小(寬度/高度)是多少?你沒有測試'cvCreateMat()'的成功,這可能是一個好主意。 – karlphillip
相同的想法..我再次嘗試與32FC1。 CvMat * tmp2 = cvCreateMat(10,10,CV_32FC1);我比較了tmp2->類型和CV_32FC1。 tmp2-> type給出1111638021,cv浮點給出5. – Chris