C++ OpenCV 实战:频率域图像增强及代码示例与注意要点
好的,下面是一个使用 C++ 和 OpenCV 实现频率域图像增强的示例代码。这个例子展示了如何使用傅里叶变换对图像进行频域滤波,具体来说是高通滤波器。 ```cpp #include <opencv2/opencv.hpp> #include <iostream> // 高通滤波器函数 void highPassFilter(cv::Mat &input, cv::Mat &output, int cutoff) { // 计算中心位置 int cx = input.cols / 2; int cy = input.rows / 2; // 创建与输入相同大小的掩码 cv::Mat mask = cv::Mat::zeros(input.size(), CV_32F); // 设置高通滤波器 for (int i = 0; i < input.rows; ++i) { for (int j = 0; j < input.cols; ++j) { double distance = std::sqrt(std::pow(i - cy, 2) + std::pow(j - cx, 2)); if (distance > cutoff) { mask.at<float>(i, j) = 1.0; } } } // 应用掩码 cv::multiply(input, mask, output); } int main() { // 读取图像 cv::Mat image = cv::imread("input.jpg", cv::IMREAD_GRAYSCALE); if (image.empty()) { std::cerr << "无法读取图像" << std::endl; return -1; } // 将图像转换为浮点类型 cv::Mat floatImage; image.convertTo(floatImage, CV_32F); // 进行傅里叶变换 cv::Mat complexImage; cv::dft(floatImage, complexImage, cv::DFT_COMPLEX_OUTPUT); // 将频谱移到图像中心 cv::Mat shiftedSpectrum; cv::dft(complexImage, shiftedSpectrum, cv::DFT_SCALE | cv::DFT_CENTER_ZERO); // 应用高通滤波器 cv::Mat filteredSpectrum; highPassFilter(shiftedSpectrum, filteredSpectrum, 30); // 将频谱移回原位 cv::Mat unshiftedSpectrum; cv::dft(filteredSpectrum, unshiftedSpectrum, cv::DFT_INVERSE | cv::DFT_REAL_OUTPUT); // 将结果转换回8位图像 cv::Mat result; unshiftedSpectrum.convertTo(result, CV_8U); // 显示结果 cv::imshow("原始图像", image); cv::imshow("增强后的图像", result); cv::waitKey(0); // 保存结果 cv::imwrite("enhanced_image.jpg", result); return 0; } ``` 额外需要注意的逻辑点 1. 边界处理:在创建掩码时,确保边界条件处理得当,避免越界访问。 2. 参数选择:`cutoff` 参数的选择会影响滤波效果,需要根据实际需求进行调整。 3. 性能优化:对于大图像,可以考虑使用多线程或 GPU 加速来提高处理速度。 希望这段代码对你有帮助!如果有任何问题,欢迎随时提问。 ######[AI写代码神器 | 724点数解答 | 2024-12-07 12:24:59]
- Java实现链表反转:迭代与递归双解法详解及开发实战指南(DeepSeek | 1409点数解答 | 2026-03-15 15:09:29)58
- 工程师必知:软件系统用户文档编写九大要点揭秘(百度文心 | 350点数解答 | 2023-11-09 18:23:53)216
- 探寻数组中最长摆动子序列长度:思路剖析与代码优化(GPT | 758点数解答 | 2024-12-23 23:18:29)288
- 独家剖析:求解数组最长摆动子序列长度的代码实现与改进建议(GPT | 350点数解答 | 2024-12-23 23:20:54)288
- OpenCV.js 轻松实现图片识别:详细步骤全解析 ( | 824点数解答 | 2024-03-22 16:22:16)208
- OpenCV.js 实战:轻松识别图片中电梯轮廓( | 1193点数解答 | 2024-03-22 16:23:32)223
- 用 C++ 和 OpenCV 生成带随机偏移的圆周上的点:代码剖析(字节豆包 | 29点数解答 | 2024-11-06 23:40:42)275
- Mac版PS 2019CC:超实用图片美颜增强PS脚本大揭秘!(字节豆包 | 309点数解答 | 2025-02-22 20:49:53)169
- PS 20.0.6 版实用美颜增强脚本大揭秘!(字节豆包 | 192点数解答 | 2025-02-28 11:01:21)242
- PS 20.0.6 实用美颜脚本:含代码及三大使用注意点 (阿里通义 | 680点数解答 | 2025-02-28 14:43:51)232
- Three.js 示例代码解析:优化场景渲染与注意要点(字节豆包 | 164点数解答 | 2025-02-27 23:30:20)285
- Python 程序控制结构破解古代算经“百钱买百鸡”不定方程问题( | 87点数解答 | 2024-11-02 16:34:14)171