gpt4 book ai didi

c++ - 在 OpenCV 中,有没有比 cv::merge 和 cv::split 更有效地组合/分离图像 channel 的方法?

转载 作者:太空宇宙 更新时间:2023-11-03 22:48:53 24 4
gpt4 key购买 nike

作为一个小背景,我正在做大量的图像过滤,使用一堆复值过滤器。我分别生成过滤器的实部和虚部(这样效率更高),并将它们存储在两个单独的数组中。

我关注了this guide关于如何在 opencv 中进行 dft。

基本上,我必须

  1. 遍历我的过滤器
  2. 调用merge合并实部和虚部
  3. 执行 DFT
  4. 再次调用split分离实虚
  5. 计算响应的大小

我这样做了,而且速度相当慢。我最初认为我需要一个更快的 FFT 库,但基于 Visual Studio 的探查器,事实证明 cv::split() 和 cv::merge() 比实际的 DFT 花费的时间多一个数量级。事实上,大部分运行时间都花在了这两个函数上。

整个拆分/合并的事情对我来说似乎有点多余,而且它们是最耗时的功能这一事实非常烦人。有没有更快的方法来完成我想做的事情?

最佳答案

OpenCV 矩阵以交错格式存储。这意味着对于具有 channel A 和 B 的双 channel 图像,4x1 矩阵将按 ABABABAB 顺序存储。如果你有两个不同的平面,你有 AAAABBBB

说服 DFT 在非交错输入上运行可能是最困难的。但是,也许您首先可以将过滤器存储为双 channel 矩阵?

要计算两个 channel 的幅度,您可以遍历所有元素并对它们调用 cv::norm 或自己进行计算。您可以使用 SSE 和/或 TBB 进一步加快速度。

因此,至少您保存了一次转化。

关于c++ - 在 OpenCV 中,有没有比 cv::merge 和 cv::split 更有效地组合/分离图像 channel 的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42846063/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com