opencv DCT低通滤波 C++
时间: 2024-01-27 19:15:18 浏览: 103
以下是使用OpenCV和C++进行DCT低通滤波的示例代码:
```cpp
#include <opencv2/opencv.hpp>
int main() {
// 读取图像
cv::Mat image = cv::imread("input.jpg", cv::IMREAD_GRAYSCALE);
// 将图像转换为浮点型
cv::Mat image_float;
image.convertTo(image_float, CV_32F);
// 执行DCT变换
cv::dct(image_float, image_float);
// 设置低通滤波器
int cutoff_frequency = 10; // 截止频率
int rows = image_float.rows;
int cols = image_float.cols;
int cx = cols / 2;
int cy = rows / 2;
// 应用低通滤波器
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
if (std::sqrt((i - cy) * (i - cy) + (j - cx) * (j - cx)) > cutoff_frequency) {
image_float.at<float>(i, j) = 0;
}
}
}
// 执行IDCT逆变换
cv::idct(image_float, image_float);
// 将图像转换回8位无符号整型
cv::Mat result;
image_float.convertTo(result, CV_8U);
// 显示结果图像
cv::imshow("Filtered Image", result);
cv::waitKey(0);
return 0;
}
```
请注意,上述代码假设输入图像为灰度图像,并将其保存为名为"input.jpg"的文件。你可以根据需要修改文件名和路径。
阅读全文