Opencv图像处理---线性滤波器

什么是内核?

内核本质上是固定大小的数值系数阵列以及该阵列中的锚点,其通常位于中心。

卷积如何与内核一起工作?

假设您想知道图像中特定位置的结果值。 卷积的值按以下方式计算:

  • 将内核锚点放在确定的像素上,内核的其余部分覆盖图像中相应的局部像素。
  • 将核系数乘以相应的图像像素值并对结果求和。
  • 将结果放在输入图像中锚点的位置。
  • 通过在整个图像上扫描内核,对所有像素重复此过程。

代码

代码的流程

  • 加载图像
  • 执行标准化的框过滤器。 例如,对于size size = 3的内核,内核将是:
  • 该程序将使用大小为3,5,7,9和11的内核执行过滤操作。
#include "opencv2/imgproc.hpp"
#include "opencv2/highgui.hpp"
#include <stdlib.h>
#include <stdio.h>
using namespace cv;
/* @function main */
int main ( int argc, char** argv )
{
  Mat src, dst;
  Mat kernel;
  Point anchor;
  double delta;
  int ddepth;
  int kernel_size;
  char* window_name = "filter2D Demo";
  int c;
  src = imread( argv[1] );
  if( !src.data )
  { return -1; }
  namedWindow( window_name, WINDOW_AUTOSIZE );
  anchor = Point( -1, -1 );
  delta = 0;
  ddepth = -1;
  int ind = 0;
  while( true )
    {
      c = waitKey(500);
      if( (char)c == 27 )
        { break; }
      kernel_size = 3 + 2*( ind%5 );
      kernel = Mat::ones( kernel_size, kernel_size, CV_32F )/ (float)(kernel_size*kernel_size);
      filter2D(src, dst, ddepth , kernel, anchor, delta, BORDER_DEFAULT );
      imshow( window_name, dst );
      ind++;
    }
  return 0;
}

解释

  • 加载图像
  • 创建一个窗口以显示结果
  • 初始化线性过滤器的参数
  • 执行无限循环更新内核大小并将我们的线性过滤器应用于输入图像。 让我们更详细地分析一下。
  • 首先,我们定义我们的过滤器将要使用的内核。 这里是:
  • 设置内核后,我们可以使用函数cv :: filter2D生成过滤器:
  • 参数表示:
  1. src:源图像
  2. dst:目标图像
  3. ddepth:dst的深度。 负值(例如-1)表示深度与源相同
  4. kernel:要通过映像扫描的内核
  5. anchor:锚点相对于其内核的位置。 位置Point(-1,-1)默认表示中心。
  6. delta:卷积过程中要添加到每个像素的值。 默认情况下为0
  7. BORDER_DEFAULT:我们默认使用此值
  • 我们的程序将实现一个while循环,每500 ms我们的过滤器的内核大小将在指定的范围内更新。

效果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
线性滤波器是一种常用的图像处理技术,它通过对图像的每个像素及其周围像素进行加权求和来生成输出像素值。Python中可以使用OpenCV库来实现线性滤波器。其中,常见的线性滤波器有均值滤波器和高斯滤波器。 均值滤波器是一种简单的线性滤波器,它将每个像素的值替换为其周围像素的平均值。这种滤波器可以用于图像平滑处理,减少噪声的影响。 高斯滤波器是一种基于高斯函数的线性滤波器,它可以有效地平滑图像并保留更多的细节。与均值滤波器不同,高斯滤波器会对周围像素进行加权求和,使得离中心像素更近的像素具有更高的权重。 在Python中,可以使用OpenCV的函数cv2.filter2D来进行线性滤波。该函数的参数包括输入图像、输出图像的深度、滤波核(即滤波器)以及锚点的位置。 下面是使用均值滤波器和高斯滤波器进行图像处理的示例代码: 使用均值滤波器: ```python import cv2 image = cv2.imread("input.jpg") # 读取输入图像 filtered_image = cv2.blur(image, (3, 3)) # 使用均值滤波器进行滤波,滤波核大小为3x3 cv2.imwrite("output.jpg", filtered_image) # 保存输出图像 ``` 使用高斯滤波器: ```python import cv2 image = cv2.imread("input.jpg") # 读取输入图像 filtered_image = cv2.GaussianBlur(image, (3, 3), 0) # 使用高斯滤波器进行滤波,滤波核大小为3x3 cv2.imwrite("output.jpg", filtered_image) # 保存输出图像 ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值