首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >opencv中dct实现中的误差

opencv中dct实现中的误差
EN

Stack Overflow用户
提问于 2015-01-01 11:51:17
回答 1查看 4.6K关注 0票数 1

当我尝试在opencv中实现dct时,为什么会出现以下错误?

代码语言:javascript
复制
Assertion failed (type == CV_32FC1 || type == CV_64FC1) in dct,

以下是代码:

代码语言:javascript
复制
#include <cv.h>
#include "opencv2/imgproc/imgproc.hpp"
#include <highgui.h>
#include <iostream>

using namespace cv;
using namespace std;

int main()
{
    Mat image,dimage(image);
       image = imread( "lena.jpg", 1 );

      if( !image.data )
        {
          printf( "No image data \n" );
           return -1;
         }

        namedWindow( "Display Image", CV_WINDOW_AUTOSIZE );
        imshow( "Display Image", image );
        dimage=Mat::zeros(image.rows,image.cols,CV_32F);
        dct(image, dimage, DCT_INVERSE == 0 );

        namedWindow( "DCT Image", CV_WINDOW_AUTOSIZE );
        imshow( "DCT image", dimage );
        waitKey(0);

       return 0;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-01 12:48:55

您必须首先将您的图像从uchar转换为浮动(可能稍后返回到uchar ):

代码语言:javascript
复制
// also please use the c++ headers, not the old c-ones !

#include "opencv2/core/core.hpp" 
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"

Mat image = imread( "lena.jpg", 0 ); // grayscale

Mat fimage;
image.convertTo(fimage, CV_32F, 1.0/255); // also scale to [0..1] range (not mandatory)

// you're lucky with lena (512x512), for odd sizes, you have to 
// pad it to pow2 size, or use dft() instead:
Mat dimage;
dct( fimage, dimage ); 
// process dimage,
// then same way back:
dct( dimage, dimage, DCT_INVERSE );
dimage.convertTo(image, CV_8U); // maybe scale back to [0..255] range (depending on your processing)

imshow("result",image);
waitKey();
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27730534

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档