OpenCV 图像处置惩罚中滤波技能介绍

打印 上一主题 下一主题

主题 539|帖子 539|积分 1617

VS2022设置OpenCV环境


  • 关于OpenCV在VS2022上设置的教程可以参考:VS2022 设置OpenCV开辟环境详细教程
图像处置惩罚中滤波技能

图像滤波是图像处置惩罚中的一种重要技能,用于改善图像质量或提取图像中的特定特征。以下是一些常见的图像滤波技能:

  • 均值滤波(Mean Filter)

    • 简单且广泛使用的线性滤波器,用于平滑图像并淘汰噪声。
    • 通过将每个像素值替换为该像素四周邻域内像素值的均匀值来实现。

  • 高斯滤波(Gaussian Filter)

    • 一种权重滤波器,使用高斯函数作为权重,对图像进行平滑处置惩罚。
    • 高斯滤波器对图像的边沿和细节有较好的保留效果。

  • 中值滤波(Median Filter)

    • 一种非线性滤波器,通过替换每个像素值为其邻域内的中值来淘汰噪声。
    • 对于椒盐噪声(salt-and-pepper noise)特殊有效。

  • 锐化滤波(Sharpening Filter)

    • 通过加强图像中的高频身分来进步图像的清楚度。
    • 常用的锐化滤波器包罗拉普拉斯滤波器。

  • 拉普拉斯滤波(Laplacian Filter)

    • 用于边沿检测,通过突出图像中的二阶导数来实现。
    • 拉普拉斯滤波器可以加强图像的边沿,但也可能放大噪声。

  • 双边滤波(Bilateral Filter)

    • 联合了均值滤波和高斯滤波的优点,同时保留了边沿信息。
    • 它根据像素的强度和空间距离进行加权,以平滑图像而不含糊边沿。

  • 高通滤波(High-pass Filter)

    • 允许高频信号通过,阻止低频信号。
    • 在图像处置惩罚中,通常用于突出边沿和细节。

  • 低通滤波(Low-pass Filter)

    • 与高通滤波器相反,允许低频信号通过,阻止高频信号。
    • 用于图像平滑和去噪。

  • 傅里叶变换滤波(Fourier Transform Filtering)

    • 使用傅里叶变换将图像从空间域转换到频率域。
    • 在频率域中应用滤波器,然后通过逆傅里叶变换将图像转换回空间域。

  • 形态学滤波(Morphological Filtering)

    • 包罗膨胀(Dilation)、腐蚀(Erosion)、开运算(Opening)、闭运算(Closing)等。
    • 用于图像的形态学操纵,如去除小的不规则性或连接断裂的区域。

每种滤波技能都有其特定的应用场景和效果。选择符合的滤波器取决于图像的特性和处置惩罚目的。例如,高斯滤波适合于平滑图像和去除高斯噪声,而中值滤波则更适合于去除椒盐噪声。在实际应用中,可能需要联合多种滤波技能来达到最佳效果。
均值滤波


  • 介绍:均值滤波是最简单的滤波器之一,它将每个像素的值替换为其邻域内所有像素值的均匀值。
  • 函数:blur()
  • c++ demo:
  1. #include <opencv2/opencv.hpp>
  2. int main() {
  3.     cv::Mat image, blur_image;
  4.     image = cv::imread("amy.png", cv::IMREAD_COLOR);
  5.     cv::blur(image, blur_image, cv::Size(5, 5)); // 5x5的均值滤波
  6.     cv::imshow("blur_image", blur_image);
  7.     cv::waitKey(0); // 等待用户按键
  8.     return 0;
  9. }
复制代码


  • 结果:

高斯滤波


  • 介绍: 高斯滤波使用高斯函数作为权重来计算邻域内像素的均匀值,对图像进行平滑。
  • 函数:GaussianBlur()
  • c++ demo
  1. #include <opencv2/opencv.hpp>
  2. int main() {
  3.     cv::Mat image, gaussian_image;
  4.     image = cv::imread("amy.png", cv::IMREAD_COLOR);
  5.     cv::GaussianBlur(image, gaussian_image, cv::Size(5, 5), 0); // 5x5的高斯滤波
  6.     cv::imshow("gaussian_image", gaussian_image);
  7.     cv::waitKey(0); // 等待用户按键
  8.     return 0;
  9. }
复制代码


  • 结果:

中值滤波


  • 介绍:中值滤波是一种非线性滤波器,它将每个像素替换为其邻域内所有像素值的中值,对椒盐噪声非常有效。
  • 函数:medianBlur()
  • c++ demo
  1. #include <opencv2/opencv.hpp>
  2. int main() {
  3.     cv::Mat image, median_image;
  4.     image = cv::imread("amy.png", cv::IMREAD_COLOR);
  5.     cv::medianBlur(image, median_image, 5); // 5x5的中值滤波
  6.     cv::imshow("median_image", median_image);
  7.     cv::waitKey(0); // 等待用户按键
  8.     return 0;
  9. }
复制代码


  • 结果:

双边滤波


  • 介绍:双边滤波在平滑图像的同时保留边沿,它根据像素值的接近度和空间距离来加权。
  • 函数:bilateralFilter()
  • c++ demo
  1. #include <opencv2/opencv.hpp>
  2. int main() {
  3.     cv::Mat image, bilateral_image;
  4.     image = cv::imread("amy.png", cv::IMREAD_COLOR);
  5.     cv::bilateralFilter(image, bilateral_image, 9, 75, 75); // 9x9的双边滤波
  6.     cv::imshow("bilateral_image", bilateral_image);
  7.     cv::waitKey(0); // 等待用户按键
  8.     return 0;
  9. }
复制代码


  • 结果:

锐化滤波


  • 介绍:锐化滤波通过加强图像的高频分量来使图像看起来更清楚。
  • 函数:filter2D()
  • c++ demo
  1. #include <opencv2/opencv.hpp>
  2. int main() {
  3.     cv::Mat image, sharpen_image;
  4.     image = cv::imread("amy.png", cv::IMREAD_COLOR);
  5.     cv::Mat kernel = (cv::Mat_<char>(3, 3) << 0, -1, 0,
  6.         -1, 5, -1,
  7.         0, -1, 0);
  8.     cv::filter2D(image, sharpen_image, image.depth(), kernel);
  9.     cv::imshow("sharpen_image", sharpen_image);
  10.     cv::waitKey(0); // 等待用户按键
  11.     return 0;
  12. }
复制代码


  • 结果:

拉普拉斯滤波


  • 介绍:拉普拉斯滤波是一种边沿加强的线性滤波器,它使用拉普拉斯算子来突出图像的二阶导数。
  • 函数
  • c++ demo:
  1. #include <opencv2/opencv.hpp>
  2. int main() {
  3.     cv::Mat image, laplacian_image;
  4.     image = cv::imread("amy.png", cv::IMREAD_COLOR);
  5.     cv::Laplacian(image, laplacian_image, CV_16S, 1);
  6.     cv::convertScaleAbs(laplacian_image, laplacian_image); // 转换为无符号8位
  7.     cv::imshow("laplacian_image", laplacian_image);
  8.     cv::waitKey(0); // 等待用户按键
  9.     return 0;
  10. }
复制代码


  • 结果:

方框滤波


  • 介绍:方框滤波是一种简单的线性滤波器,它将每个像素的值替换为其邻域内所有像素值的总和除以邻域巨细。
  • 函数:blur()
  • c++ demo
  1. #include <opencv2/opencv.hpp>
  2. int main() {
  3.     cv::Mat src_image, box_image;
  4.     src_image = cv::imread("amy.png", cv::IMREAD_COLOR);
  5.     cv::blur(src_image, box_image, cv::Size(3, 3), cv::Point(-1, -1),
  6.     cv::BORDER_DEFAULT);
  7.     cv::imshow("box_image", box_image);
  8.     cv::waitKey(0); // 等待用户按键
  9.     return 0;
  10. }
复制代码


  • 结果:

自定义滤波器


  • 介绍:可以创建自定义的滤波器核来应用特定的效果。
  • 函数:filter2D
  • c++ demo
  1. #include <opencv2/opencv.hpp>
  2. int main() {
  3.     cv::Mat src_image, custom_filtered_image;
  4.     src_image = cv::imread("amy.png", cv::IMREAD_COLOR);
  5.     cv::Mat custom_kernel = (cv::Mat_<float>(3, 3) << 1, 1, 1,
  6.         1, 0, 1,
  7.         1, 1, 1);
  8.     cv::filter2D(src_image, custom_filtered_image, src_image.depth(), custom_kernel);
  9.     cv::imshow("custom_filtered_image", custom_filtered_image);
  10.     cv::waitKey(0); // 等待用户按键
  11.     return 0;
  12. }
复制代码


  • 结果:


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

不到断气不罢休

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表