2012-06-01 1 views
1

Я использую OpenCV 2.1 с vs2010 (кодирование на C). После извлечения синей плоскости из изображения rgb я применил dct к ней, чтобы получить преобразованную матрицу.вычислить dct в opencv с использованием функции cvDCT

cvDCT(source,destination,CV_DXT_FORWARD); 

Он успешно строит, но как-то не выполняет

ошибки, как «исключение необработанного в 0x75c89617 в freqDomain.exe: Microsoft C++ исключения: сорт :: Exception в ячейке памяти 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

да нашел решение :) проблема была с типом данных исходного изображения. он должен быть float или double .. Я использовал функцию cvConvert для преобразования из unsigned int в 32-битные значения float.

 Смежные вопросы

  • Нет связанных вопросов^_^