我正在将OpenCV 2.1与vs2010(用C编码)一起使用。从rgb图像中提取蓝色平面后,我将dct应用于它以获得转换后的矩阵。

cvDCT(source,destination,CV_DXT_FORWARD);

它正在成功构建,但是以某种方式未执行

该错误类似于“freqDomain.exe中0x75c89617的未处理异常:Microsoft C++异常:内存位置0x001ce35c处的cv::Exception。”

我认为错误在于设置输出图像的cvarray类型。可以将其设置为IPL_DEPTH_8U还是应该 float ?

这是我的代码段:
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);

    ...

最佳答案

是的,找到了解决方案:)
问题出在源图像的数据类型上。它应该是float或double。
我使用cvConvert函数将unsigned int转换为32位浮点值。

关于c - 使用cvDCT函数在opencv中计算dct,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10850213/

10-10 12:52