2012-06-01 28 views
1

我使用OpenCV 2.1與vs2010(C編碼)。從rgb圖像中提取藍色平面後,我將dct應用於它以獲得變換後的矩陣。使用cvDCT函數在opencv中計算dct

cvDCT(source,destination,CV_DXT_FORWARD); 

它成功建立,但不知何故,沒有執行

錯誤就像是0x75c89617在freqDomain.exe「未處理的異常:微軟C++異常:異常CV ::內存位置0x001ce35c .. 「

我認爲錯誤在設置輸出圖像的cvarray類型。可以將它設置爲IPL_DEPTH_8U還是浮動?

這是我的代碼片段:

int main() 
{ 
    IplImage *input,*output,*b,*g,*r; 
    input=cvLoadImage("dolphin.jpg"); 
    int width,height; 
    width=input->width; 
    height=input->height; 
    b=cvCreateImage(cvSize(width,height),IPL_DEPTH_8U,1); 
    g=cvCreateImage(cvSize(width,height),IPL_DEPTH_8U,1); 
    r=cvCreateImage(cvSize(width,height),IPL_DEPTH_8U,1); 
    cvSplit(input,b,g,r,NULL); 
    cvNamedWindow("blue",CV_WINDOW_AUTOSIZE); 
    IplImage *b_dct,*g_dct,*r_dct; 
    b_dct=cvCreateImage(cvSize(width,height),8,1); 
    g_dct=cvCreateImage(cvSize(width,height),8,1); 
    r_dct=cvCreateImage(cvSize(width,height),8,1); 
    cvDCT(b,b_dct,0); // doubt?? 
    cvShowImage("blue",b_dct); 

    ... 

回答

1

耶找到了解決辦法:) 的問題是與源圖像的數據類型。它應該是浮動或雙.. 我用cvConvert函數從unsigned int轉換爲32位浮點值。