qq_40912408 2021-10-16 17:47 采纳率: 100%
浏览 27
已结题

FFTW使用与for傅里叶水印

概述:(opencv,Mat转float 用fftw_execute()执行出错)fftw_plan_dft_2d中的input数据是Mat.data==>已经用Mat.convertTo 转换过了(CV_32F)

根据要求:要对彩色图片加傅里叶水印进行优化,目前的效率是:4M的jpg图片加水印耗时30秒,个人采用线程并行的方式对于效率进行了优化,但是只是优化了3倍没有达到要求的6倍。按照现在的思路,将opencv::dft 替换成 fftw::fftw_plan_dft_2d /fftwf_plan r2c = fftwf_plan_dft_r2c_2d

cv::Mat WaterMarkText::GefFft(cv::Mat& input, void* mallo)
{
    
    int iCol = input.cols;
    int iRow = input.rows;

    fftw_plan plan_f = fftw_plan_dft_2d(iRow, iCol, (fftw_complex*)input.data, (fftw_complex*)input.data, FFTW_FORWARD, FFTW_ESTIMATE);
    //convertU1ToF1(img_src_data, realInput, iCol, iRow);
    //fftwf_plan r2c = fftwf_plan_dft_r2c_2d(iRow, iCol, (float*)input.data, realInput, FFTW_PATIENT);
    
    fftw_execute(plan_f);//出现问题

    fftw_destroy_plan(plan_f);
    return input;
}

还没走到这里已经出现问题。
fftwf_plan_dft_c2r_2d的实现 
cv::Mat WaterMarkText::GefIFft(cv::Mat& input, void* mallo)
{
    int iCol = input.cols;
    int iRow = input.rows;
    fftwf_plan c2r = fftwf_plan_dft_c2r_2d(iRow, iCol, (fftwf_complex *)input.data, (float*)input.data, FFTW_PATIENT);
    fftwf_execute(c2r);
    fftwf_destroy_plan(c2r);
    return input;
}

  • 写回答

3条回答

      报告相同问题?

      相关推荐 更多相似问题

      问题事件

      • 系统已结题 10月27日
      • 已采纳回答 10月19日
      • 修改了问题 10月16日
      • 创建了问题 10月16日

      悬赏问题

      • ¥15 Power pivot无法刷新数据
      • ¥15 刚入职被要求写这种文档,应该如何下手
      • ¥15 最优经济尺寸设计问题
      • ¥15 从多元正态分布中生成3维样本
      • ¥15 GEO下载数据的处理报错 :函数‘Meta’标签‘"data.frame"’找不到继承方法,如何解决?
      • ¥15 android object box 一个实体多个表怎么写
      • ¥15 temux 启用docker 服务失败
      • ¥15 Flask 使用celery发送邮件出现‘目标计算机积极拒绝‘
      • ¥15 超时跳出方法代码的返回值问题
      • ¥15 汇编语言程序设计设计,ascii码求数,再求数的BCD码