【OpenCV图像处理】1.15自定义线性滤波

2023-11-13

自定义线性滤波

线性滤波就是卷积,实际上的作用就是降噪

  • 卷积概念

    • 卷积是图像处理中一个操作,是kernel在图像的每个像素上的操作。
    • Kernel本质上一个固定大小的矩阵数组,其中心点称为锚点(anchor point)
  • 卷积如何工作?

    • 把kernel放到像素数组之上,求锚点周围覆盖的像素乘积之和(包括锚点),用来替换锚点覆盖下像素点值称为卷积处理。
    • 数学表达如下: H ( x , y ) = ∑ i = 0 M i − 1 ∑ j = 0 M j − 1 I ( x + i − a i , y + j − a j ) K ( i , j ) H(x, y)=\sum_{i=0}^{M_{i}-1} \sum_{j=0}^{M_{j}-1} I\left(x+i-a_{i}, y+j-a_{j}\right) K(i, j) H(x,y)=i=0Mi1j=0Mj1I(x+iai,y+jaj)K(i,j)
      在这里插入图片描述
      Sum = 8x1+6x1+6x1+2x1+8x1+6x1+2x1+2x1+8x1
      New pixel = sum / (m*n)
  • 常见算子

    • Robert算子

    • Sobel算子
      在这里插入图片描述

    • 拉普拉斯算子
      在这里插入图片描述

  • 自定义卷积模糊

    • filter2D函数
    filter2D(
    Mat src, //输入图像
    Mat dst, // 模糊图像
    int depth, // 图像深度32/8
    Mat kernel, // 卷积核/模板
    Point anchor, // 锚点位置
    double delta // 计算出来的像素+delta
    )
    其中 kernel是可以自定义的卷积核
    

知道卷积、傅里叶变换,这样就具备了图像处理的基础知识。

完整代码:

#include <iostream>
#include <string>
#include <opencv2/opencv.hpp>
#include <opencv2/imgproc/types_c.h>

using namespace std;
using namespace cv;

#ifndef P16
#define P16 16
#endif

int main() {
    std::string path = "../fei.JPG";
    cv::Mat img = cv::imread(path, 5);

    string str_input = "input image";
    string str_output = "output image";

    if(img.empty())
    {
        std::cout << "open file failed" << std::endl;
        return -1;
    }

#if P16  //自定义线性卷积
    imshow("input", img);

    Mat dest_x,dest_y;
    //Robert X方向
    Mat kernel_x = (Mat_<int>(2,2) << 1,0,0,-1);
    filter2D(img,dest_x,-1,kernel_x,Point(-1,-1),0.0);
    imshow("Robert X", dest_x);

    //Robert Y方向
    Mat kernel_y = (Mat_<int>(2,2) << 0,1,-1,0);
    filter2D(img,dest_y,-1,kernel_y,Point(-1,-1),0.0);
    imshow("Robert Y", dest_y);

    int ksize;
    Mat kernel;
    int c = 0;
    int index = 1;
    while(true)
    {
        c = waitKey(500);
        if((char)c == 27)
        {
            break;
        }

        ksize = 3 + 2 *(index %5);
        kernel = Mat::ones(Size(ksize,ksize),CV_32F)/(float)(ksize*ksize);
        filter2D(img,dest_x,-1,kernel,Point(-1,-1),0);
        imshow("result",dest_x);
        index ++;
    }
#endif

    cv::waitKey(0);
    cv::destroyAllWindows();
    return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【OpenCV图像处理】1.15自定义线性滤波 的相关文章

  • VideoCapture 未检测到 uEye 摄像头

    我的 uEye 相机遇到了一个问题 使用我的笔记本电脑摄像头 id 0 或 USB 上的网络摄像头 id 1 此行完美运行 TheVideoCapturer open 1 TheVideoCapturer 属于 VideoCapture 类
  • OpenCV 读取视频文件时内存不足

    此示例从文件中读取视频cv2 VideoCapture在 python OpenCV 中内存不足 import cv2 cap cv2 VideoCapture file mp4 while True ret frame cap read
  • 如何将 OpenCV 的测试框架与 CMake 结合使用?

    好像 OpenCV 有一个测试框架 https github com Itseez opencv tree ef91d7e8830c36785f0b6fdbf2045da48413dd76 modules ts include opencv
  • 使用 openCV 对图像中的子图像进行通用检测

    免责声明 我是计算机视觉菜鸟 我看过很多关于如何在较大图像中查找特定子图像的堆栈溢出帖子 我的用例有点不同 因为我不希望它是具体的 而且我不确定如何做到这一点 如果可能的话 但我感觉应该如此 我有大量图像数据集 有时 其中一些图像是数据集的
  • OpenCV Python cv2.mixChannels()

    我试图将其从 C 转换为 Python 但它给出了不同的色调结果 In C Transform it to HSV cvtColor src hsv CV BGR2HSV Use only the Hue value hue create
  • OpenCV 无法从 MacBook Pro iSight 捕获

    几天后 我无法再从 opencv 应用程序内部打开我的 iSight 相机 cap cv2 VideoCapture 0 返回 并且cap isOpened 回报true 然而 cap grab 刚刚返回false 有任何想法吗 示例代码
  • 基于 OpenCV 边缘的物体检测 C++

    我有一个应用程序 我必须检测场景中某些项目的存在 这些项目可以旋转并稍微缩放 更大或更小 我尝试过使用关键点检测器 但它们不够快且不够准确 因此 我决定首先使用 Canny 或更快的边缘检测算法 检测模板和搜索区域中的边缘 然后匹配边缘以查
  • 为什么opencv videowriter这么慢?

    你好 stackoverflow 社区 我有一个棘手的问题 我需要你的帮助来了解这里发生了什么 我的程序从视频采集卡 Blackmagic 捕获帧 到目前为止 它工作得很好 同时我用 opencv cv imshow 显示捕获的图像 它也工
  • 通过 cmake 链接作为外部项目包含的 opencv 库[重复]

    这个问题在这里已经有答案了 我对 cmake 比较陌生 经过几天的努力无法弄清楚以下事情 我有一个依赖于 opencv 的项目 它本身就是一个 cmake 项目 我想静态链接 opencv 库 我正在做的是我的项目中有一份 opencv 源
  • OpenCV OpenNI 校准kinect

    我使用 home 通过 kinect 进行捕捉 capture retrieve depthMap CV CAP OPENNI DEPTH MAP capture retrieve bgrImage CV CAP OPENNI BGR IM
  • 多线程中的 OpenCV CascadeClassifier C++ 接口

    我想在多个线程中使用 CascadeClassifier 对象运行 OpenCV C 接口 我的程序的工作方式是我的主线程将 some file xml 加载到 CascadeClassifier 对象中 生成三个或更多线程并向它们传递级联
  • CMake:编译 OpenCV 时未找到 CUDA 库

    我正在 Windows 上使用 CMAKE 编译支持 CUDA 的 OpenCV 3 0 0 当我点击 配置 时 出现如下错误 CMake Error The following variables are used in this pro
  • python求边数

    我使用下面的代码来查找图像中的边数 但它没有给出适当的结果 导入CV2 image cv2 imread sheet jpg gray cv2 cvtColor image cv2 COLOR BGR2GRAY thresh cv2 thr
  • 如何创建关键点来计算 SIFT?

    我正在使用 OpenCV Python 我已经使用确定角点cv2 cornerHarris 输出的类型为dst 我需要计算角点的 SIFT 特征 输入到sift compute 必须是以下类型KeyPoint 我不知道如何使用cv2 Key
  • tesseract Remove_Reference Visual Studio 2012 项目中的不明确符号

    我将更详细地描述我的情况 我正在使用 C OpenCV Tesseect 构建一个车牌识别系统 但是当我编译代码时 它返回给我一堆错误模糊引用 所以我检查了代码的所有行 我在这个小组中搜索了解决方案 并尝试了几种但没有成功 问题 error
  • HOGDescriptor 带有视频来识别物体

    不幸的是 我既是 python 又是 openCV 初学者 所以如果问题很愚蠢 请原谅我 我正在尝试使用cv2 HOGDescriptor识别视频中的物体 我关心的是逐帧识别 即没有跟踪等 这是我正在做的事情 我读了视频 目前是 mpg 通
  • OpenCV C++ 多线程

    我在 4 个不同的 Mat 对象上调用了 4x 这个 opencv 图像处理函数 void processBinary Mat binaryMat image processing 我想要对其进行多线程处理 以便所有 4 个方法调用同时完成
  • 如何从图像中提取 RGB 并仅将 RG 绘制为图形? R 代表 X,G 代表 Y

    我正在尝试从图像中提取 RGB 分量并使用 matplotlib 绘制 3D RGB 直方图 但我不知道该怎么做 这是我当前的代码 import cv2 import numpy as np from scipy import ndimag
  • 找不到 tbb.dll

    我在 opencv 2 3 中使用 cvCanny 函数 它编译得很好 但在执行时出现错误 提示 tbb dll 未找到 这个dll有什么用处 在哪里可以找到这个 thanks 它是英特尔的一部分线程构建块 http threadingbu
  • OpenCV 实时捕获桌面屏幕

    我正在使用 OpenCV 进行 C 编码项目 我在 OpenCV 中遇到一些限制 我想分析视频文件并检测某些对象 这工作得很好 但现在我希望它分析我的桌面屏幕的一部分 居住 有人知道如何实现这一点吗 我想过制作一个网络摄像头模拟器来捕获我的

随机推荐

  • linux安装nginx服务器并配置支持php LNMP搭建

    本机环境 centos7 4 64bit 概要 使用yum安装nginx 源码编译安装php fpm 配置让服务器能支持解析php 友情连接 LAMP搭建 https blog csdn net Dong Alex article deta
  • 修改数据库表结构(SQLserver)

    1 添加表字段 alter table 表名 add 字段名 类型 值 示例 alter table tableName add columnName varchar 40 2 删除表字段 alter table 表名 drop colum
  • 建站系列(五)--- 前端开发语言之HTML、CSS、JavaScript

    目录 相关系列文章 前言 一 前端开发与后端开发 二 前端语言简介 一 HTML 二 CSS 三 JavaScript 三 学习指导 一 开发环境 二 第一个Hello world 相关系列文章 建站系列 一 网站基本常识 建站系列 二 域
  • SpringMVC requestBody和responseBody重复获取

    SpringMVC requestBody和responseBody重复获取 最近有个需求 要根据响应结果来判断 是否需要保存requestBody的内容到数据库 想法使用拦截器HandlerInterceptor 拦截需要处理的url 根
  • Java反射:如何正确理解,不如手写一个(反射包分析、楼主亲测)

    Java反射机制 动态代理是基于什么原理 这个问题可谓是老生常谈的一个热门问题了 如果没有深入的思考还真的是很难回到上来 那么今天我们一起来看看 如何正确清晰的认识这个热门却又说简单又不简单说复杂又比较复杂的问题 一 什么是反射 反射机制是
  • Activiti 架构分析

    Activiti是业界很流行的java工作流引擎 关于Activiti与JBPM5的关系和如何选择不是本文要讨论的话题 相关内容可以baidu一下 Activiti从架构角度看是比较优秀的 是很面向对象的 是我所阅读过的代码结构很棒的开源软
  • 基于Metronic的Bootstrap开发框架经验总结(1)-框架总览及菜单模块的处理

    最近一直很多事情 博客停下来好久没写了 整理下思路 把最近研究的基于Metronic的Bootstrap开发框架进行经验的总结出来和大家分享下 同时也记录自己对Bootstrap开发的学习研究的点点滴滴 希望在开一个 基于MVC4 Easy
  • kubectl 命令简化为k以及自动补全

    编辑配置文件 vi bashrc 加入如下3行 alias k kubectl complete o default F start kubectl k source lt kubectl completion bash 使配置生效 sou
  • 基于LendingClub数据的信贷分析和建模报告

    一 课题分析 二 数据获取 三 数据探索 主要特征含义理解 特征分布 目标特征分布 分类变量的分布 连续数值特征分布 时序特征分布 文字特征分布 两两特征的协方差 四 数据预处理 数据集划分 特征缺失值识别与处理 严重缺失值的处理 缺失值填
  • 仿everything的文件搜索工具项目详解:Part2

    目录 代码架构 基本架构 开发语言 Java8 数据库 SQLite JavaFX 多线程 文件IO流 Lombok Atomic原子类 项目难点 主要数据结构 数据表 FileMeta FileScannerCallBack接口及其子类
  • linux目录和cat命令

    1 Linux目录结构 根 相当于一个入口 文件的总入口 也是唯一入口 bin sbin 二进制文件 可执行文件 也可能存在别处 默认使用较多所有用户软连接文件 命令 sbin 管理员可使用的二进制文件 命令ls cd useradd bo
  • globals()与locals()函数

    在Python中 globals 和locals 是两个内置函数 用于获取当前作用域内的全局和局部命名空间中的变量和对象 一 globals 这个函数返回一个包含当前全局作用域中所有变量和对象的字典 在函数内部调用globals 将返回全局
  • Typora-常用快捷键

    Typora常用快捷键 1 字体编辑 大小 ctr 数字或ctr 加减号 加粗 ctr b 倾斜 ctr i 下划线 ctr u 删除线 alt shift 5 上标 字体 下标 字体 高亮 字体 清除格式 ctrl 2 创建列表 无序列表
  • Keil最舒服的配色方案

    每次重装keil 都会重新配置下颜色 因为默认的颜色 看久了实在不太舒服 每次调到一个舒服的颜色 都要花不少时间 为了后面节省时间 现记录一下 如下就是我觉得还不错的配色方案 如果你觉得也还可以 可以接着往下看 一 进入配置 二 光标所在行
  • 数据预处理与可视化

    https blog csdn net u013719780 article category 6285514 https blog csdn net u013719780 article category 6457723
  • 公司新招了个字节拿36K的人,让我见识到了什么才是测试扛把子......

    5年测试 应该是能达到资深测试的水准 即不仅能熟练地开发业务 而且还能熟悉项目开发 测试 调试和发布的流程 而且还应该能全面掌握数据库等方面的技能 如果技能再高些的话 甚至熟悉分布式组件等高级技能 或者说 做个项目小组长 管个3 4号人 应
  • SpringBoot-yml配置文件的使用与优势

    目录 一 什么是yml配置文件 二 如何在SpringBoot中使用yml配置文件 三 如何在SpringBoot中注入yml配置文件的属性 Value注解 ConfigurationProperties注解 四 yml配置文件与prope
  • c++ 成员属性设置为私有

    成员属性设置为私有 1 可以自己控制读写权限 2 对于写可以检测数据的有效性 include
  • 免费版Typora设置vue主题

    一 下载Typora与主题vue安装包 最新版版本的Typora网上开始收取费用 现在低版本的Typora仍然还是免费的 而且并不影响正常使用 下载链接在下方 并提供了vue主题文件 链接 百度网盘 请输入提取码 提取码 tdp4 二 添加
  • 【OpenCV图像处理】1.15自定义线性滤波

    自定义线性滤波 线性滤波就是卷积 实际上的作用就是降噪 卷积概念 卷积是图像处理中一个操作 是kernel在图像的每个像素上的操作 Kernel本质上一个固定大小的矩阵数组 其中心点称为锚点 anchor point 卷积如何工作 把ker