OpenCV运动分析和目标跟踪(4)创建汉宁窗函数createHanningWindow()的使用
- 操作系统:ubuntu22.04
- OpenCV版本:OpenCV4.9
- IDE:Visual Studio Code
- 编程语言:C++11
算法描述
此函数计算二维的汉宁窗系数。
createHanningWindow是OpenCV中的一个函数,用于创建汉宁窗(Hann window)。汉宁窗通常用于频域处理中,可以减少边界效应并提高频率分辨率。在图像处理中,它通常用于频域滤波或特征提取等任务。
更多信息请参见(http://en.wikipedia.org/wiki/Hann_function)和(http://en.wikipedia.org/wiki/Window_function)。
下面给出一个示例:
// create hanning window of size 100x100 and type CV_32F
Mat hann;
createHanningWindow(hann, Size(100, 100), CV_32F);
汉宁窗(Hann window)是一种常用的窗函数,主要用于信号处理和图像处理等领域。它是一种平滑的窗口函数,可以减少边界效应(如吉布斯现象),并提高频谱分辨率。汉宁窗在频域处理中特别有用,例如在傅里叶变换前后应用以减少泄漏效应。
汉宁窗在以下场景中有广泛的应用:
- 频域滤波:在傅里叶变换前后应用汉宁窗可以减少频谱泄漏。
- 特征提取:在图像处理中,可以应用于图像的频域分析,减少边界效应。、
- 噪声去除:通过对频谱应用汉宁窗,可以有效地减少噪声的影响
函数原型
void cv::createHanningWindow
(
OutputArray dst,
Size winSize,
int type
)
参数
- 参数dst 用于放置汉宁系数的目标数组。
- 参数winSize 窗口大小的规格(宽度和高度都必须大于1)。
- 参数type 创建的数组类型。
代码示例
#include <opencv2/opencv.hpp>
#include <iostream>
int main()
{
// 加载图像
cv::Mat frame = cv::imread("/media/dingxin/data/study/OpenCV/sources/images/sun2.jpg", cv::IMREAD_GRAYSCALE);
if (!frame.data) {
std::cout << "Could not open or find the image" << std::endl;
return -1;
}
// 创建汉宁窗
cv::Mat hannWindow;
cv::createHanningWindow(hannWindow, frame.size(), CV_64F);
// 使用 cv::minMaxLoc 找到最大值
double minVal, maxVal;
cv::minMaxLoc(hannWindow, &minVal, &maxVal);
// 将汉宁窗转换为8位图像以便显示
cv::Mat hannWindow8U;
hannWindow.convertTo(hannWindow8U, CV_8U, 255.0 / (maxVal - minVal), -minVal * (255.0 / (maxVal - minVal)));
// 显示原始图像
cv::imshow("Original Image", frame);
// 显示汉宁窗图像
cv::imshow("Hanning Window", hannWindow8U);
// 等待按键,以便查看图像
cv::waitKey(0);
// 关闭所有窗口
cv::destroyAllWindows();
// 保存结果
cv::imwrite("hanning_window_result.jpg", hannWindow8U);
return 0;
}