003 OpenCV filter2D

news2024/11/24 6:55:47

目录

一、环境

二、图像卷积

三、代码演示

3.1、锐化

3.2、sobel边缘,x方向

3.3、sobel边缘,y方向

3.4、高斯模糊

3.5、完整代码


一、环境

本文使用环境为:

  • Windows10
  • Python 3.9.17
  • opencv-python 4.8.0.74

二、图像卷积

在OpenCV中,filter2D函数是用于在图像空间域进行卷积操作的函数。然而,你也可以通过fft2ifft2函数在频率域进行滤波。下面我将对这两种方法进行简单的比较。

空间域卷积:

空间域卷积是一种直接在图像上应用滤波器的方法。filter2D函数会接受一个输入图像和一个滤波器,然后在输入图像上应用滤波器。滤波器是一个二维数组,通常是一个核对图像进行卷积。例如,你可以使用一个边缘检测滤波器来检测图像中的边缘。

优点:

  1. 直观:空间域卷积直观易懂,易于实现和理解。
  2. 计算效率高:由于滤波器直接应用于图像像素,因此这种方法的计算效率相对较高。

缺点:

  1. 边缘效应:空间域卷积可能会在图像边缘产生不期望的效应,例如边缘像素的变形。
  2. 无法处理大滤波器:由于卷积核需要覆盖整个图像,因此对于大的滤波器,空间域卷积可能会变得非常慢。

频域滤波:

频域滤波是在频率域上应用滤波器的方法。首先,使用fft2函数将输入图像转换到频率域,然后应用滤波器,最后使用ifft2将结果转换回空间域。在频率域上,滤波器可以是一个一维数组,大大降低了处理时间和内存需求。

优点:

  1. 处理大滤波器:由于在频率域上进行滤波,所以可以处理任意大小的滤波器,而不会增加卷积核的大小。
  2. 边缘效应减少:由于在频率域上进行操作,所以可以减少在空间域卷积中出现的边缘效应。

缺点:

  1. 计算复杂度增加:频域滤波需要额外的步骤来转换图像到频率域和回空间域,这会增加计算的复杂度。
  2. 对噪声敏感:频率域滤波可能会放大图像中的噪声,特别是在高频部分。
  3. 需要更多的内存:频域滤波需要额外的内存来存储频率域的图像和滤波器。

总的来说,空间域卷积和频域滤波各有其优点和缺点。选择哪种方法取决于你的具体需求和问题。例如,如果你需要处理非常大的滤波器或者需要减少边缘效应,那么频域滤波可能是一个更好的选择。如果你需要快速简单的方法或者处理小滤波器,那么空间域卷积可能更适合你。

三、代码演示

卷积在图像中原理很简单,如下图,图像I1被卷积核K提取特征,最终得到I2,但是要注意,I1维度是5x5的,计算的时候,需要将其四周边界进行拓展(padding),形成7X7的矩阵(拓展区域填充0),然后卷积,最后才能得到5X5的I2。

3.1、锐化

# 卷积核:锐化
    kernel_shape = np.array([[0, -1, 0],
                             [-1, 5, -1],
                             [0, -1, 0]], np.float32)  # kernel should be floating point type

下面左边是原图,右边是效果图,效果图明显比原图更加清晰。

3.2、sobel边缘,x方向

# 卷积核:sobel边缘,X方向
    kernel_sebelx = np.array([[-1, 0, 1],
                             [-2, 0, 2],
                             [-1, 0, 1]], np.float32) 

3.3、sobel边缘,y方向

# 卷积核:sobel边缘,y方向
    kernel_sebely = np.array([[1, 2, 1],
                             [0, 0, 0],
                             [-1, -2, -1]], np.float32) 

3.4、高斯模糊

# 卷积核:高斯模糊,元素和为1
    kernel_gaussian = np.array([[0.1, 0.1, 0.1],
                                [0.1, 0.2, 0.1],
                                [0.1, 0.1, 0.1]], np.float32) 

3.5、完整代码

from __future__ import print_function
import sys
import time
import numpy as np
import cv2 as cv

def main(argv):
    src = cv.imread('7.jpg', 1)
    cv.namedWindow("Input", cv.WINDOW_AUTOSIZE)
    cv.namedWindow("Output", cv.WINDOW_AUTOSIZE)
    cv.imshow("Input", src)
    # 卷积核:锐化
    kernel_shape = np.array([[0, -1, 0],
                             [-1, 5, -1],
                             [0, -1, 0]], np.float32)  # kernel should be floating point type
    # 卷积核:sobel边缘,X方向
    kernel_sebelx = np.array([[-1, 0, 1],
                             [-2, 0, 2],
                             [-1, 0, 1]], np.float32) 
    # 卷积核:sobel边缘,y方向
    kernel_sebely = np.array([[1, 2, 1],
                             [0, 0, 0],
                             [-1, -2, -1]], np.float32) 
    # 卷积核:高斯模糊,元素和为1
    kernel_gaussian = np.array([[0.1, 0.1, 0.1],
                                [0.1, 0.2, 0.1],
                                [0.1, 0.1, 0.1]], np.float32) 
    #dst1 = cv.filter2D(src, -1, kernel_shape)
    #dst1 = cv.filter2D(src, -1, kernel_sebelx)
    #dst1 = cv.filter2D(src, -1, kernel_sebely)
    dst1 = cv.filter2D(src, -1, kernel_gaussian)
    cv.imshow("Output", dst1)
    cv.waitKey(0)
    cv.destroyAllWindows()
    return 0

if __name__ == "__main__":
    main(sys.argv[1:])

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1220222.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CentOS停服背景下“浪潮信息KeyarchOS(KOS)系统迁移(无缝切换)解决方案”

1 前言 1.1 背景介绍 CentOS停服事件源于2020年12月宣布的CentOS项目变更,其原计划是基于Red Hat Enterprise Linux(RHEL)的开源版本,提供长期支持。然而,在2020年12月8日,官方宣布终止CentOS Linux的项目…

【数学】正投影和仿射投影

正投影 (Orthographic projection) Weak perspective projection Affine projection 形式1 形式2

BGP引入实验,华为ensp模拟器

一个小作业题,中间三台路由器bgp 100 分支用rip和ospf,最后如有引入时通过前缀列表精确匹配和路由策略调用,都是一些基本配置,考研学生们的基本功扎不扎实,从最最基础的接口配ip,到igp的路由配置&#xff0…

独立站和跨境电商平台的一个优缺点对比,哪个更适合你?

不管哪个行业都是一样的,有优点也有缺点,就像人们常说的人无完人一样。然后,我们来说说最近比较受关注的跨境电商独立站和跨境电商平台的一个优缺点对比吧! 了解跨境电商独立站 建站,测试模板网站 跨境电商独立站 优点…

早上好图片漂亮祝福语,祝你事业芝麻节节高,好运连连天天妙!

1、清晨,我呼吸着新鲜空气,迎面的风捎来了你的气息,不知你现在在哪里?希望在这美丽的早晨时时见到开开心心的你,早安! 2、无论岁月如何变幻,不变的是心态,改变的是容颜,…

阿里云CentOS主机开启ipv6

目录 一、云主机开启和使用 ipv6 1、网络和交换机开启 ipv6 2、创建 / 编辑云主机,开启ipv6 3、安全组放行ipv6端口 二、使用 ipv6 地址进行 ssh 连接 三、ipv6 地址绑定域名 一、云主机开启和使用 ipv6 1、网络和交换机开启 ipv6 进入网络、交换机详情页面…

低代码是“银弹”,还是“毒弹”?

目录 1.Pro Code 真的更“香”吗? 门槛高 跨界难 代码编写只是第一步 2.Low Code 银弹论合理吗? Pro Code和Low Code的差异: 3.写在最后 “低代码”接力“中台”燃起了熊熊之火,引发了众多业内人士论战。有人认为低代码是毒瘤&…

使用FP8加速PyTorch训练

现代的人工智能硬件架构(例如,Nvidia Hopper, Nvidia Ada Lovelace和Habana Gaudi2)中,FP8张量内核能够显著提高每秒浮点运算(FLOPS),以及为人工智能训练和推理工作负载提供内存优化和节能的机会。 在这篇文章中,我们将介绍如何修…

DBeaver 23.2.4发布

导读DBeaver 23.2.4发布,修复和添加了一些新功能。 SQL 编辑器 为更新语句添加了代码自动补全功能修复了智能补全和替换带引号表达式的问题删除了日志中首次打开 SQL 编辑器时出现的多余错误 数据库导航器 添加了过滤对象可视化功能修复了脚本文件夹打开问题 数据传输 正确…

消除“数据烟囱”,瓴羊港如何打破壁垒将多数据融通成大数据?

作为数字经济时代的“新石油”,数据已成为重要的生产要素。阿里巴巴副总裁、瓴羊CEO朋新宇认为,目前正处在数据流通变革的时代,其中最核心的问题是如何破解数实融合发展的堵点。数据流通中最重要的原则是,不流通无价值&#xff0c…

echarts 实现同一组legend控制两个饼图示例

实现同一组legend控制两个饼图示例: 该示例有如下几个特点: ①饼图不同值实现分割 ②实现tooltip自定义样式(echarts 实现tooltip提示框样式自定义-CSDN博客) ③自定义label内容 ④不同值颜色渐变 代码如下: this.o…

html实现图片裁剪处理(附源码)

文章目录 1.设计来源1.1 主界面1.2 裁剪界面 2.效果和源码2.1 动态效果2.2 源代码 源码下载 作者:xcLeigh 文章地址:https://blog.csdn.net/weixin_43151418/article/details/134455169 html实现图片裁剪处理(附源码),支持图片放大缩小&#…

Linux下安装部署redis(离线模式)

一、准备工作 1.下载redis的安装包 下载地址:Index of /releases/ 大家可以自行选择redis的版本,笔者选择的是最新的 2.上传到服务器 前提是我先在服务器上创建了一个目录redis7.2.3,我直接上传到这个目录下 二、安装redis 1.解压redis t…

阿里云服务器ECS安装宝塔面板

前言 如今各种云服务器租借平台,例如腾讯云、阿里云之类的,很轻松的就能租借得到一台Linux的服务器。但是Linux的管理和使用存在一定的门槛。宝塔面板作为一款流行的服务器管理软件,提供了简单易用的图形化界面和丰富的管理功能,降…

Android SmartTable根据int状态格式化文字及颜色

private void initData() {List<UserInfo> list new ArrayList<>();list.add(new UserInfo("一年级", "李同学", 6, 1, 120, 1100, 450, 0));list.add(new UserInfo("一年级", "张同学", 6, 2, 120, 1100, 450, 1));list…

electron使用better-sqlite3打包失败(electron打包有进程没有界面)

remove *\chrome_100_percent.pak: Access is denied. 解决&#xff1a; 管理员权限执行&#xff1a;taskkill /IM 你的进程名.exe /F&#xff0c;再次执行build electron使用better-sqlite3打包后有进程没有界面 原因是代码及依赖包安装有误&#xff0c;模块丢失。主要分享的…

Flat Ads将在杭州举办社交出海沙龙,探寻海外巨大增量空间

深圳站落幕后&#xff0c;Flat Ads社交沙龙活动迎来杭州站&#xff01;11月29日&#xff0c;Flat Ads联动Alibaba Cloud、TopOn、融云&#xff0c;开展《泛娱乐社交APP出海新风口-杭州站》&#xff0c;分享如何捕捉出海新赛道的风向标&#xff0c;并迅速实现获客增长&#xff0…

36 mysql 主键冲突 和 唯一索引冲突

前言 我们这里 来看一下 我们经常碰到的 "duplicate key xxx" 测试表结构如下 CREATE TABLE tz_test (id int(11) unsigned NOT NULL AUTO_INCREMENT,field1 varchar(128) DEFAULT NULL,PRIMARY KEY (id) USING BTREE,KEY field1 (field1) USING BTREE ) ENGINEI…

超声功率放大器使用范围有哪些

超声功率放大器是一种特殊的设备&#xff0c;用于放大超声波信号的功率级别。它在各种领域都有广泛的应用范围&#xff0c;下面将详细介绍超声功率放大器的使用范围。 医学影像领域&#xff1a; 在医学影像领域&#xff0c;超声功率放大器被广泛用于超声诊断设备。它们能够放大…