2014-04-07 92 views
0

我試圖通過Mat函數,但當我嘗試獲取圖像的float數據時出現一些錯誤。有人能告訴我什麼是錯的?錯誤。表達式必須有一個類類型

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    cv::Mat img;//gradients from fingerprint image 
    cv::Mat dst; 
    bh2Rad(&img,&dst); 
} 

void bh2Rad(Mat* srcMat,cv::Mat* dstMat) 
{ 
    for (int i=0; i < srcMat->rows ;i++) 
    { 
     float* srcP = srcMat->data.fl + srcMat->width * i;// srcMat Error. 
     float* dstP = dstMat->data.fl + dstMat->width * i;//dstMat Error 

     for (int j = 0; j < srcMat->cols ;j++) 
      dstP[j] = srcP[j] * BH_DEG_TO_RAD; 
    } 
} 
+0

您是否包含'Mat.h'? –

+0

什麼錯誤?他們在哪? – zoska

+0

是「srcMat-> data」中的「數據」指針嗎? – Matt

回答

1

你似乎混淆了舊的(c-api)CvMat與cv :: Mat與像素操作。

此外,灰度圖像是uchar,而不是float,並且您無法以任意格式訪問其像素(除非您之前convertTo()float)。

int main(int argc, char* argv[]) 
{ 

    cv::Mat img = cv::imread("original.bmp", CV_LOAD_IMAGE_GRAYSCALE); 
    cv::Mat dst; 

    bh2Rad(img,dst); 

} 

// 
// please use references with cv::Mat, not pointers. 
// those things are refcounted, you're thrashing that with passing pointers. 
// 
void bh2Rad(const cv::Mat & srcMat, cv::Mat & dstMat) 
{ 
    dstMat.create(srcMat.size(),srcMat.type()); 
    for (int i=0; i < srcMat.rows ;i++) 
    { 
    const uchar* srcP = srcMat.ptr<uchar>(i); 
    uchar* dstP = dstMat.ptr<uchar>(i); 

    for (int j = 0; j < srcMat.cols ;j++) 
     dstP[j] = srcP[j] * BH_DEG_TO_RAD; 
    } 
} 
+0

嗨。我仍然有錯誤。首先,爲什麼const Mat?順便說一句,如果我改變了常量墊只有墊,我仍然有錯誤,這是src->行和src-> cols – user3396218

+0

1.顯示它沒有被修改。 2.哦 - 我的不好,看編輯 – berak

+0

如果我使用const Mat,它會給出一個「類型爲」const uchar「的值的錯誤,不能用於初始化* uchar類型的實體 – user3396218

1

錯誤標誌着您沒有使用命名空間CV限定Mat的唯一實例。我假設你沒有用於命名空間CV的using指令,因此僅在CV中聲明的類型Mat是未知的並且不被識別。

void bh2Rad(cv::Mat* srcMat, cv::Mat* dstMat) 

(注意左括號後直接CV ::)。

+0

謝謝,但我已經開始使用「使用命名空間簡歷」。對困惑感到抱歉 – user3396218

相關問題