calculați dct în opencv folosind funcția cvDCT

Eu folosesc OpenCV 2.1 cu vs2010 (codificare în C). După extragerea planului albastru dintr-o imagine rgb, i-am aplicat dct pentru a obține matricea transformată.

cvDCT(source,destination,CV_DXT_FORWARD);

Se construiește cu succes, dar într-un fel nu se execută

Eroarea este ca "Excepție neschimbată la 0x75c89617 în freqDomain.exe: Excepția Microsoft C ++: cv :: Excepție la locația de memorie 0x001ce35c .."

Cred că eroarea este în stabilirea tipului de cvarray al imaginii de ieșire. este bine să-l setați la IPL_DEPTH_8U sau ar trebui să fie float?

Acesta este fragmentul meu de cod:

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

1 răspunsuri

da a găsit soluția :) problema a fost cu tipul de date al imaginii sursă. ar trebui să fie plutiți sau dublu .. Am folosit funcția cvConvert pentru a converti de la valori nesemnate int la valori de flotare de 32 biți.

1
adăugat