fuguanglong 2015-05-10 09:10 采纳率: 100%
浏览 2742
已采纳

小波变换 图像压缩系统实现 源代码

急求代码,要有注释,因为是新手入门,可以通过上传资料,积分本人较多,但求一个好的代码,谢谢

  • 写回答

2条回答 默认 最新

  • 传说中的虫虫 2015-05-10 15:20
    关注

    基于OPENCV的代码

    // 小波变换层数
    int nLayer = 2;
    // 输入彩色图像
    IplImage *pSrc = cvLoadImage("Lena.jpg", CV_LOAD_IMAGE_COLOR);
    // 计算小波图象大小
    CvSize size = cvGetSize(pSrc);
    if ((pSrc->width >> nLayer) << nLayer != pSrc->width)
    {
    size.width = ((pSrc->width >> nLayer) + 1) << nLayer;
    }
    if ((pSrc->height >> nLayer) << nLayer != pSrc->height)
    {
    size.height = ((pSrc->height >> nLayer) + 1) << nLayer;
    }
    // 创建小波图象
    IplImage *pWavelet = cvCreateImage(size, IPL_DEPTH_32F, pSrc->nChannels);
    if (pWavelet)
    {
    // 小波图象赋值
    cvSetImageROI(pWavelet, cvRect(0, 0, pSrc->width, pSrc->height));
    cvConvertScale(pSrc, pWavelet, 1, -128);
    cvResetImageROI(pWavelet);
    // 彩色图像小波变换
    IplImage *pImage = cvCreateImage(cvGetSize(pWavelet), IPL_DEPTH_32F, 1);
    if (pImage)
    {
    for (int i = 1; i <= pWavelet->nChannels; i++)
    {
    cvSetImageCOI(pWavelet, i);
    cvCopy(pWavelet, pImage, NULL);
    // 二维离散小波变换
    DWT(pImage, nLayer);
    // 二维离散小波恢复
    // IDWT(pImage, nLayer);
    cvCopy(pImage, pWavelet, NULL);
    }
    cvSetImageCOI(pWavelet, 0);
    cvReleaseImage(&pImage);
    }
    // 小波变换图象
    cvSetImageROI(pWavelet, cvRect(0, 0, pSrc->width, pSrc->height));
    cvConvertScale(pWavelet, pSrc, 1, 128);
    cvResetImageROI(pWavelet);
    cvReleaseImage(&pWavelet);
    }
    // 显示图像pSrc
    // ...
    cvReleaseImage(&pSrc);

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大
  • ¥15 import arcpy出现importing _arcgisscripting 找不到相关程序