Soulia 2022-03-09 15:35 采纳率: 100%
浏览 66
已结题

opencv 就地离散傅里叶变换时 出现内存错误

调试的时候,在 CV_Assert(DataType<_Tp>::channels == m.channels() || m.empty());
0x00007FF82731478C 处(位于 zbartest1.exe 中)有未经处理的异常: Microsoft C++ 异常: cv::Exception,位于内存位置 0x0000007A694FC880 处。


```c++
    int m = getOptimalDFTSize(srcImg.rows);
    int n = getOptimalDFTSize(srcImg.cols);// on the border add zero values
    Mat padded;
    copyMakeBorder(srcImg, padded, 0, m - srcImg.rows, 0, n - srcImg.cols, BORDER_CONSTANT, Scalar::all(0));//copyMakeBorder(srcImg, padded, 0, opWidth - srcImg.rows, 0, opHeight - srcImg.cols, BORDER_CONSTANT, Scalar::all(0));
    Mat planes[] = { Mat_<float>(padded), Mat::zeros(padded.size(), CV_32F) };////将planes数组组合合并成一个多通道的数组comImg
    Mat comImg;  
    merge(planes, 2, comImg);//将Mat数组中的两个单通道float类型的图像归并到一个Mat对象complexI中,得到的Mat对象complexI 便是一个两通道的图像了,且每个通道均为float类型(CV_32F)
    dft(comImg, comImg);//就地离散傅里叶变换
split(comImg, planes);
    magnitude(planes[0], planes[1], planes[0]);

```

  • 写回答

1条回答 默认 最新

  • 爱晚乏客游 2022-03-09 15:50
    关注

    检查一下图片吧,看下图片是不是空的。
    然后检查一下srcImg是不是单通道的,不是的话转成单通道看下,你这个报错应该是merge的时候报的错误吧,还是dft报的错误?

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 3月18日
  • 已采纳回答 3月10日
  • 创建了问题 3月9日

悬赏问题

  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥15 键盘指令混乱情况下的启动盘系统重装
  • ¥40 复杂的限制性的商函数处理