首页 > 其他分享 >OpenCV(cv::getOptimalDFTSize())

OpenCV(cv::getOptimalDFTSize())

时间:2024-08-28 15:08:04浏览次数:8  
标签:DFT OpenCV 大小 傅里叶 cv getOptimalDFTSize

目录



cv::getOptimalDFTSize() 是 OpenCV 中的一个函数,用于返回最优的离散傅里叶变换(DFT)大小。具体来说,它帮助找到一个比给定大小更大的最优尺寸,用来加速傅里叶变换的计算。

cv::getOptimalDFTSize() 的功能是返回适合执行快速傅里叶变换 (FFT) 的最优大小。DFT 的性能取决于输入数组的大小,而这个函数确保输出的大小能够被 2、3 和 5 整除,这样可以更有效地计算 FFT。



1. 函数定义

int cv::getOptimalDFTSize(int vecsize);

参数:

  • vecsize: 输入的数组大小,表示的是期望的 DFT 的大小。它可以是图像的宽度或者高度,也可以是其他任意的数字。

返回值:

  • 返回的值是一个大于等于 vecsize 的整数,并且该整数是可以被 2、3 或 5 整除的最小值。

使用场景:

在使用 cv::dft() 进行频域变换时,选择适当的大小可以加快运算速度。因此,常常会先使用 cv::getOptimalDFTSize() 来计算出最优的 DFT 大小,然后将输入数据进行填充(通常使用 cv::copyMakeBorder()cv::resize()),以便提升性能。

例如,对于一张图像,在执行 DFT 之前通常会调整图像的尺寸为 cv::getOptimalDFTSize() 返回的值。



2. 示例

下面是一个简单的使用示例,展示如何利用 cv::getOptimalDFTSize() 优化 DFT 计算:

#include <opencv2/opencv.hpp>
#include <iostream>

int main() {
    cv::Mat img = cv::imread("image.jpg", cv::IMREAD_GRAYSCALE);
    if (img.empty()) {
        std::cerr << "Image not found!" << std::endl;
        return -1;
    }

    // 获取图像的宽度和高度
    int rows = img.rows;
    int cols = img.cols;

    // 计算最优DFT大小
    int optimalRows = cv::getOptimalDFTSize(rows);
    int optimalCols = cv::getOptimalDFTSize(cols);

    // 填充图像到最优大小
    cv::Mat padded;
    cv::copyMakeBorder(img, padded, 0, optimalRows - rows, 0, optimalCols - cols, cv::BORDER_CONSTANT, cv::Scalar::all(0));

    // 执行DFT
    cv::Mat complexI;
    cv::dft(padded, complexI, cv::DFT_COMPLEX_OUTPUT);

    std::cout << "Original size: (" << rows << ", " << cols << ")" << std::endl;
    std::cout << "Optimal size: (" << optimalRows << ", " << optimalCols << ")" << std::endl;

    return 0;
}


3. 总结

cv::getOptimalDFTSize() 是 OpenCV 中一个简单而实用的函数,用于在进行频域转换前优化输入数据的大小,确保可以高效地执行快速傅里叶变换。通过调整输入尺寸,能显著提高傅里叶变换的速度。



标签:DFT,OpenCV,大小,傅里叶,cv,getOptimalDFTSize
From: https://www.cnblogs.com/keye/p/18384686

相关文章

  • OpenCV(cv::Rect)
    目录1.构造函数和用法2.常用属性和方法3.示例4.用途cv::Rect是OpenCV中的一个用于定义矩形区域的类。它被广泛应用于图像处理任务中,如裁剪图像、绘制矩形或定义图像上的兴趣区域(ROI,RegionofInterest)。矩形的定义依赖于左上角的点坐标以及矩形的宽度和高度。1.构造......
  • OpenCV(cv::Point、cv::Rect、cv::Mat)
    目录1.cv::Point1.1主要属性:1.2示例:1.3用途:2.cv::Rect2.1主要属性:2.2主要方法:2.3示例:2.4用途:3.cv::Mat3.1主要属性:3.2主要方法:3.3示例:3.4用途:4.总结在OpenCV中,cv::Point、cv::Rect和cv::Mat是三个非常常用的类,分别用于表示点、矩形和图像/矩阵数据。下面是它......
  • OpenCV(cv::calcHist())
    目录1.函数定义2.示例3.功能说明4.典型应用cv::calcHist()是OpenCV中用于计算图像或图像集合的直方图的函数。直方图是一个图像的像素值的分布统计,它表示图像中每个像素强度值的频率。1.函数定义cv::calcHist(constMat*images,intnimages,constint*channels,......
  • OpenCV 图像矫正技术深入探讨
    刚进入实验室导师就交给我一个任务,就是让我设计算法给图像进行矫正。哎呀,我不太会图像这块啊,不过还是接下来了,硬着头皮开干吧!那什么是图像的矫正呢?举个例子就好明白了。我的好朋友小明给我拍了这几张照片,因为他的拍照技术不咋地,照片都拍得歪歪扭扭的,比如下面这些照片:人民......
  • OpenCV Mat和IplImage访问像素的方法总结
    在opencv的编程中,遍历访问图像元素是经常遇到的操作,掌握其方法非常重要,无论是Mat类的像素访问,还是IplImage结构体的访问的方法,都必须扎实掌握,毕竟,图像处理本质上就是对像素的各种操作,访问元素就是各种图像处理算法的第一步。首先先看看图像的是怎么存储的。单通道图像多......
  • CSEC:香港城市大学提出SOTA曝光矫正算法 | CVPR 2024
    CSEC:香港城市大学提出SOTA曝光矫正算法|CVPR2024 在光照条件不佳下捕获的图像可能同时包含过曝和欠曝。目前的方法主要集中在调整图像亮度上,这可能会加剧欠曝区域的色调失真,并且无法恢复过曝区域的准确颜色。论文提出通过学习估计和校正这种色调偏移,来增强既有过曝又有欠......
  • CSEC:香港城市大学提出SOTA曝光矫正算法 | CVPR 2024
    在光照条件不佳下捕获的图像可能同时包含过曝和欠曝。目前的方法主要集中在调整图像亮度上,这可能会加剧欠曝区域的色调失真,并且无法恢复过曝区域的准确颜色。论文提出通过学习估计和校正这种色调偏移,来增强既有过曝又有欠曝的图像。先通过基于UNet的网络推导输入图像的增亮和变暗......
  • FlexAttention:解决二次复杂度问题,将大型视觉语言模型的输入提升至1008 | ECCV 2024
    \({\ttFlexAttention}\)是一种旨在增强大型视觉语言模型的方法,通过利用动态高分辨率特征选择和分层自注意机制,使其能够有效地处理并从高分辨率图像输入中获得优势,\({\ttFlexAttention}\)在性能和效率方面超越了现有的高分辨率方法。来源:晓飞的算法工程笔记公众号论文:F......
  • Yololov5+Pyqt5+Opencv 实时城市积水报警系统
    在现代城市生活中,积水问题不仅影响交通和人们的日常生活,还可能对城市基础设施造成潜在的威胁。为了快速、准确地识别和应对积水问题,使用计算机视觉技术进行智能积水检测成为一个重要的解决方案。在这篇博客中,我将带你一步步实现一个基于YOLOv5的积水检测系统,帮助你轻松应对城市......
  • OpenCV(cv::circle())
    目录1.函数2.示例3.说明4.使用场景cv::circle()是OpenCV提供的一个函数,用于在图像上绘制圆形。它非常适用于在图像处理任务中标记特定的点或区域。这个函数具有多种参数,允许你根据需要控制圆的颜色、位置、半径和边界厚度。1.函数voidcv::circle(InputOutputArrayi......