当前位置: 首页 > news >正文

《Opencv》基础操作详解(3)

接上篇:《Opencv》基础操作详解(2)-CSDN博客

Opencv基础操作

目录

Opencv基础操作

18、图像边界填充

 19、阈值处理(图像的二值化)

20、图像平滑处理

(1)、均值滤波(Mean Filtering)

(2)、方框滤波(Box Filtering)

(3)、高斯滤波(Gaussian Filtering)

(4)、中值滤波(Median Filtering)

21、图像形态学操作

(1)、图像腐蚀

(2)、图像膨胀

 (3)、开运算(先腐蚀后膨胀)

(4)、闭运算(先膨胀后腐蚀)


18、图像边界填充

cv2.copyMakeBorder()是OpenCV库中的一个函数,用于给图像添加额外的边界(padding)。

copyMakeBorder(src: UMat, top: int, bottom: int, left: int, right: int, borderType: int, dst: UMat | None = ..., value: cv2.typing.Scalar = ...)

src:要扩充边界的原始图像。

top, bottom, left, right:相应方向上的边框宽度。

borderType:定义要添加边框的类型,它可以是以下的一种:

  • cv2.BORDER_CONSTANT:添加的边界框像素值为常数(需要额外再给定一个参数)。
  • cv2.BORDER_REFLECT:添加的边框像素将是边界元素的镜面反射,类似于gfedcba|abcdefgh|hgfedcba。 (交界处也复制了)
  • cv2.BORDER_REFLECT_101 或 cv2.BORDER_DEFAULT:和上面类似,但是有一些细微的不同,类似于gfedcb|abcdefgh|gfedcba (交接处删除了
  •  cv2.BORDER_REPLICATE:使用最边界的像素值代替,类似于aaaaaa|abcdefgh|hhhhhhh
  • cv2.BORDER_WRAP:上下左右边依次替换,cdefgh|abcdefgh|abcdefg
import cv2
img = cv2.imread('./images/img.png')
constant = cv2.copyMakeBorder(img,50,50,50,50,borderType=cv2.BORDER_CONSTANT,value=(229,25,80))
reflact = cv2.copyMakeBorder(img,50,50,50,50,borderType=cv2.BORDER_REFLECT)
reflact101 = cv2.copyMakeBorder(img,50,50,50,50,borderType=cv2.BORDER_REFLECT101)
replicate = cv2.copyMakeBorder(img,50,50,50,50,borderType=cv2.BORDER_REPLICATE)
wrap = cv2.copyMakeBorder(img,50,50,50,50,borderType=cv2.BORDER_WRAP)cv2.imshow('yuan',img)
cv2.waitKey(0)
cv2.imshow('constant',constant)
cv2.waitKey(0)
cv2.imshow('reflact',reflact)
cv2.waitKey(0)
cv2.imshow('reflact101',reflact101)
cv2.waitKey(0)
cv2.imshow('replicate',replicate )
cv2.waitKey(0)
cv2.imshow('wrap',wrap)
cv2.waitKey(0)
cv2.destroyAllWindows()

 19、阈值处理(图像的二值化)

阈值处理是指剔除图像内像素值高于一定值或低于一定值的像素点。

retval,dst=cv2.threshold(src,thresh,maxval,type)

retval 代表返回的阈值

dst 代表阈值分割结果图像,与原始图像具有相同的大小和类型

src 代表要进行阈值分割的图像,可以是多通道的,8位或32位浮点型数值

thresh 代表要设定的阈值

maxval 代表type参数位THRESH_BINARY或者THRESH_BINARY_INV类型时,需要设定的最大值

type 代表阈值分割的类型,具体内容如下表所示:                                    

选项 像素值>thresh 其他情况
cv2.THRESH_BINARYmaxval0
cv2.THRESH_BINARY_INV0maxval
cv2.THRESH_TRUNCthresh当前灰度值  
cv2.THRESH_TOZERO当前灰度值0
cv2.THRESH_TOZERO_INV0当前灰度值

img = cv2.imread('./images/img_1.png',0)
ret,binary = cv2.threshold(img,150,255,cv2.THRESH_BINARY)
ret1,binaryinv = cv2.threshold(img,150,255,cv2.THRESH_BINARY_INV)
ret2,trunc = cv2.threshold(img,150,255,cv2.THRESH_TRUNC)
ret3,tozero = cv2.threshold(img,150,255,cv2.THRESH_TOZERO)
ret4,tozeroinv = cv2.threshold(img,150,255,cv2.THRESH_TOZERO_INV)cv2.imshow('yuantu',img)
cv2.waitKey(0)
cv2.imshow('binary',binary)
cv2.waitKey(0)
cv2.imshow('binaryinv',binaryinv)
cv2.waitKey(0)
cv2.imshow('trunc',trunc)
cv2.waitKey(0)
cv2.imshow('tozero',tozero)
cv2.waitKey(0)
cv2.imshow('tozeroinv',tozeroinv)
cv2.waitKey(0)
cv2.destroyAllWindows()
print(ret)

20、图像平滑处理

图像平滑(smoothing)也称为“模糊处理”(bluring), 是一项简单且使用频率很高的图像处理方法。 可以用来压制、弱化或消除图像中的细节、突变、边缘和噪声。但最常见的是用来减少图像上的噪声或者失真。 降低图像分辨率时,平滑处理是很重要的。

下面是几种在图像平滑处理时常用的滤波器:

(1)、均值滤波(Mean Filtering)

均值滤波是一种简单的线性滤波方法,它通过计算图像中每个像素周围邻域的平均值来替代该像素的值。均值滤波器通常使用一个固定大小的窗口(如3x3、5x5等)在图像上滑动,窗口内的所有像素值的平均值作为中心像素的新值。

dst=cv2.blur(src, ksize, anchor, borderType)

dst 是返回值

src 是需要处理的图像

kszie 是滤波核(卷积核)的大小 anchor是锚点,默认值是(-1,-1)一般无需更改 borderType 是边界样式,一般无需更改

公式:

特点:

  • 简单易实现。

  • 对高斯噪声有较好的平滑效果。

  • 可能会模糊图像的边缘。

(2)、方框滤波(Box Filtering)

方框滤波与均值滤波非常相似,区别在于方框滤波可以选择是否对窗口内的像素值进行归一化。如果不进行归一化,方框滤波实际上就是对窗口内的像素值进行求和。

dst=cv2.boxFilter(src,ddepth,ksize,anchor,normalize,borderType)

dst 是返回值,表示进行方框滤波后得到的处理结果。

src  是需要处理的图像,即原始图像。

ddepth 是处理结果图像的图像深度,一般使用-1表示与原始图像使用相同的图像深度。(可以理解为数据类型)

ksize 是滤波核的大小。滤波核大小是指在滤波处理过程中所选择的邻域图像的高 度和宽度。

anchor 是锚点,(指对应哪个区域)

normalize  表示在滤波时是否进行归一化,当值为True时,归一化,用邻域像素值的和除以面积。 此时方框滤波与 均值滤波 效果相同;当值为False时,不归一化,直接使用邻域像素值的和。和大于255时使用255。

公式:

特点:

  • 与均值滤波类似,但可以选择不进行归一化。

  • 常用于积分图像的计算。

(3)、高斯滤波(Gaussian Filtering)

高斯滤波是一种加权平均滤波方法,它使用高斯函数来计算窗口内像素的权重。高斯滤波器根据像素与中心像素的距离来分配不同的权重,距离越近的像素权重越大。

cv2.GaussianBlur(src, ksize[, sigmaX[, sigmaY[, dst]]])

src: 输入图像,通常是一个NumPy数组。

ksize: 滤波器的大小,它是一个元组,表示在水平和垂直方向上的像素数量。例如,(5, 5)表示一个5x5的滤波器。

sigmaX和sigmaY: 分别表示在X轴和Y轴方向上的标准差。这些值与滤波器大小相同。默认情况下,它们都等于0,这意味着没有高斯模糊。

dst: 输出图像,通常是一个NumPy数组。如果为None,则会创建一个新的数组来存储结果。

公式:

特点:

  • 对高斯噪声有很好的平滑效果。

  • 相比于均值滤波,高斯滤波能更好地保留图像的边缘信息。

  • 计算复杂度较高。

(4)、中值滤波(Median Filtering)

中值滤波是一种非线性滤波方法,它通过计算图像中每个像素周围邻域的中值来替代该像素的值。中值滤波器通常使用一个固定大小的窗口在图像上滑动,窗口内的所有像素值按大小排序后,取中间值作为中心像素的新值。

cv2.medianBlur(src, ksize[, dst])

src: 输入图像。

ksize: 滤波器的大小,它是一个整数,表示在水平和垂直方向上的像素数量。例如,5表示一个5x5的滤波器。

dst: 输出图像,通常是一个NumPy数组。如果为None,则会创建一个新的数组来存储结果。

公式:

特点:

  • 对椒盐噪声(脉冲噪声)有很好的去除效果。

  • 不会模糊图像的边缘。

  • 计算复杂度较高。

import numpy as np
# 定义添加椒盐噪声的函数
def add_peppersalt_noise(image,n):result = image.copy()h,w = image.shape[:2]for i in range(n):x = np.random.randint(1,h)y = np.random.randint(1,w)if np.random.randint(0,2)==0:result[x,y]=0else:result[x,y]=255return resultcat = cv2.imread('./images/cat.jpg')
cv2.imshow('cat',cat)
cv2.waitKey(0)
noise = add_peppersalt_noise(cat,10000)
cv2.imshow('noise',noise)
cv2.waitKey(0)
# 均值滤波
# 3*3卷积核
blur_cat = cv2.blur(noise,(3,3))
cv2.imshow('3*3',blur_cat)
cv2.waitKey(0)
# 5*5卷积核
blur_cat1 = cv2.blur(noise,(5,5))
cv2.imshow('5*5',blur_cat1)
cv2.waitKey(0)# 方框滤波
box_Filter = cv2.boxFilter(noise,-1,(3,3),normalize=True)
cv2.imshow('box_Filter',box_Filter)
cv2.waitKey(0)
box_Filter1 = cv2.boxFilter(noise,-1,(3,3),normalize=False)
cv2.imshow('box_Filter1',box_Filter1)
cv2.waitKey(0)# 高斯滤波
Gaussian_cat = cv2.GaussianBlur(noise,(3,3),1)
cv2.imshow('Gaussian_cat',Gaussian_cat)
cv2.waitKey(0)# 中值滤波
median_cat = cv2.medianBlur(noise,3)
cv2.imshow('median_cat',median_cat)
cv2.waitKey(0)

21、图像形态学操作

(1)、图像腐蚀

cv2. erode(src, kernel, dst,anchor,iterations,borderType,borderValue)

src:  输入的图像

kernel:  用于腐蚀的结构元件如果element = Mat(),则使用3 × 3的矩形结构单元。

dst:  它是与src相同大小和类型的输出图像。

iterations:  腐蚀操作的迭代次数,默认为1。次数越多, 腐蚀操作执行的次数越多,腐蚀效果越明显

# 图像腐蚀
sun = cv2.imread(r'./images/sun.png')
cv2.imshow('sun',sun)
cv2.waitKey(0)
kernel = np.ones((3,3),np.uint8)
erosion_1 = cv2.erode(sun,kernel,iterations=1)
cv2.imshow('erosion_1',erosion_1)
cv2.waitKey(0)

(2)、图像膨胀

cv2.dilate(img, kernel, iteration)

img  目标图片

kernel  进行操作的内核,默认为3×3的矩阵

iterations  膨胀次数,默认为1

# 图像膨胀
wenzi = cv2.imread(r'./images/wenzi.png')
cv2.imshow('wenzi',wenzi)
cv2.waitKey(0)
kernel = np.ones((3,3),np.uint8)
wenzi_new = cv2.dilate(wenzi,kernel,iterations=1)
cv2.imshow('wenzi_new',wenzi_new)
cv2.waitKey(0)

 (3)、开运算(先腐蚀后膨胀)
# 开运算(先腐蚀后膨胀)
zhiwen = cv2.imread(r'./images/zhiwen.png')
cv2.imshow('zhiwen',zhiwen)
cv2.waitKey(0)
kernel = np.ones((2,2),np.uint8)
zhiwen_new = cv2.morphologyEx(zhiwen,cv2.MORPH_OPEN,kernel)
cv2.imshow('zhiwen_new',zhiwen_new)
cv2.waitKey(0)

(4)、闭运算(先膨胀后腐蚀)
# 闭运算(先膨胀后腐蚀)
zhiwen_duan = cv2.imread(r'./images/zhiwen_duan.png')
cv2.imshow('zhiwen_duan',zhiwen_duan)
cv2.waitKey(0)
kernel = np.ones((2,2),np.uint8)
zhiwen_duan_new = cv2.morphologyEx(zhiwen_duan,cv2.MORPH_CLOSE,kernel)
cv2.imshow('zhiwen_duan_new',zhiwen_duan_new)
cv2.waitKey(0)

相关文章:

《Opencv》基础操作详解(3)

接上篇:《Opencv》基础操作详解(2)-CSDN博客 Opencv基础操作 目录 Opencv基础操作 18、图像边界填充 19、阈值处理(图像的二值化) 20、图像平滑处理 (1)、均值滤波(Mean Filte…...

meshy的文本到3d的使用

Meshy官方网站: 中文官网: Meshy官网中文站 ​编辑 Opens in a new window ​编辑www.meshycn.com Meshy AI 中文官网首页 英文官网: Meshy目前似乎还没有单独的英文官网,但您可以在中文官网上找到英文界面或相关英文资料。 链…...

C语言技巧之有条件的累加

什么叫有条件的累加? 主要是依靠循环,一般形式是一个在循环里面遍历,另一个只有达到一定的条件才会累加(移动到下一个变量),从言语也能看出来,主要是用在字符串和数组里面的,毕竟链表…...

解释为什么fetch(JavaScript)无法将读取的数据存入外部变量

(一)问题描述 你可能会遇到这样的情况:在fetch之外创建变量,将fetch获取到的数据赋值给这个变量以便在fetch外使用,但在使用这个变量的时候发现值是空的,这是为什么呢? (二&#xf…...

Windows Subsystem for Linux (WSL)

目录 定义与功能 版本与特点 应用场景 启用 WSL 功能 更新WSL及其内核 下载Linux发行版本 WSL(Windows Subsystem for Linux)是微软在Windows 10和Windows 11中引入的一项功能,使用户能够在Windows上原生运行Linux的命令行工具和应用程…...

Go的Slice如何扩容

在Go语言中,slice(切片)是一个动态数组,其底层实现是基于数组,但提供了更灵活的长度和容量管理。当向slice中添加元素并超出其当前容量时,Go会自动为其分配一个更大的底层数组,并复制现有元素到…...

使用云计算开发App 有哪些坑需要避免

当我们在云计算环境下开发App时,往往会觉得一切都变得“轻松”了。毕竟,云计算提供了无限的计算资源、灵活的存储方案,还有自动化的服务,仿佛有了一个万能的工具箱,啥都能搞定。可是,别被这种“轻松”外表骗…...

ARM 架构--通用寄存器状态寄存器控制寄存器特殊用途寄存器

目录 一?ARM 架构中的寄存器 ARM 架构中的寄存器 通用寄存器 状态寄存器 控制寄存器 特殊用途寄存器 总结 二 通用寄存器 ARM 架构中的通用寄存器 ARMv7 架构 ARMv8 架构 实例 ARMv7 架构 ARMv8 架构 三 状态寄存器 ARM 架构中的状态寄存器 状态寄存器 详细…...

最新SQL Server 2022保姆级安装教程【附安装包】

目录 一、安装包下载: 下载链接:https://pan.quark.cn/s/b1c0c63d61ec 二、安装SQL Server 1.下载安装包后解压出来,双击打开 2.等待加载安装程序 3.点击基本安装 4.点击接受 5.点击浏览 6.在D盘新建文件夹 7.命名为【Sql Server】…...

学习C++:运算符

运算符 作用:用于执行代码的运算 一,算数运算符 作用:用于处理四则运算 (在除法运算中,除数不可以为0) 两个小数不可以做取模运算 (只有整型变量可以进行取模运算) 二&#xff0…...

pdf有密码,如何实现pdf转换word?

PDF想要转换成其他格式,但是当我们将文件拖到PDF转换器进行转换的时候发现PDF文件带有密码怎么办?今天分享PDF有密码如何转换成word方法。 方法一、 PDF文件有两种密码,打开密码和限制编辑,如果是因为打开密码,建议使…...

AI发展新态势:从技术突破到安全隐忧

AI安全的新挑战 近期AI领域出现了令人担忧的新发现。根据最新研究,AI模型已经开始展现出策略性欺骗的倾向。具体表现在以下几个方面: 策略性欺骗行为的出现 在实验中发现,当研究人员试图让AI执行一些"反Anthropic"的操作时(如获取模型权限和外部服务器访问),模…...

王佩丰24节Excel学习笔记——第二十二讲:制作甘特图与动态甘特图

【以 Excel2010 系列学习,用 Office LTSC 专业增强版 2021 实践】 【本章技巧】 插入图表,针对每一个图表上的元素,都可以选中选右键进行修改数据;本章中的向两端延伸,设置数据的原理;数据格式的显示方式&…...

若依框架之简历pdf文档预览功能

一、前端 (1)安装插件vue-pdf:npm install vue-pdf (2)引入方式:import pdf from "vue-pdf"; (3)components注入方式:components:{pdf} (4&…...

酷瓜云课堂(内网版)v1.1.8 发布,局域网在线学习平台方案

更新layui-v2.9.20文章复用课程期限优化编辑器内容自动提交联系方式增加抖音二维码修正课时详情页目录高亮问题修正CommentInfo中点赞判断精简AccountSearchTrait优化kg_h5_index_url()优化CourseUserTrait优化kg_setting()优化CsrfToken 系统介绍 酷瓜云课堂内网版&#xff…...

python语音机器人(青云客免费api)

强调:不用登录注册,直接使用就好 青云客智能聊天机器人API python代码,直接可以运行: 1、安装库: pip install requests pyttsx3 SpeechRecognition sounddevice numpy scipy2、完整代码: import request…...

使用ArcGIS/ArcGIS pro绘制六边形/三角形/菱形渔网图

在做一些尺度分析时,经常会涉及到对研究区构建不同尺度的渔网进行分析,渔网的形状通常为规则四边形。构建渔网的方法也很简单,使用ArcGIS/ArcGIS Pro工具箱中的【创建渔网/CreateFishnet】工具来构建。但如果想构建其他形状渔网进行相关分析&…...

5.系统学习-PyTorch与多层感知机

PyTorch与多层感知机 前言PyTroch 简介张量(Tensor)张量创建张量的类型数据类型和 dtype 对应表张量的维度变换:张量的常用操作矩阵或张量计算 Dataset and DataLoaderPyTorch下逻辑回归与反向传播数据表格 DNN(全连结网络&#x…...

AIGC与虚拟身份及元宇宙的未来:虚拟人物创作与智能交互

个人主页:云边有个稻草人-CSDN博客 目录 引言 一、AIGC在元宇宙中的作用 1.1 AIGC与虚拟人物创作 1.1.1 生成虚拟人物外观 1.1.2 个性化虚拟角色设计 1.2 AIGC与虚拟角色的行为与交互 1.2.1 行为生成与强化学习 1.2.2 对话生成与自然语言处理 二、AIGC实现…...

基于大模型LLM 应用方案

现如今LLM 应用 面临的主要问题 准确性,2. 高成本,3. 专业性,4. 时效性,5. 安全性 信息偏差/幻觉 (大模型由于数据缺陷/知识边界 会使用 可靠性下降)知识更新滞后性 (LLM 基于静态数据集训练,可能导致知识更…...

基于FPGA的PID算法学习———实现PID比例控制算法

基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...

YSYX学习记录(八)

C语言&#xff0c;练习0&#xff1a; 先创建一个文件夹&#xff0c;我用的是物理机&#xff1a; 安装build-essential 练习1&#xff1a; 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件&#xff0c;随机修改或删除一部分&#xff0c;之后…...

dedecms 织梦自定义表单留言增加ajax验证码功能

增加ajax功能模块&#xff0c;用户不点击提交按钮&#xff0c;只要输入框失去焦点&#xff0c;就会提前提示验证码是否正确。 一&#xff0c;模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...

ardupilot 开发环境eclipse 中import 缺少C++

目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作

一、上下文切换 即使单核CPU也可以进行多线程执行代码&#xff0c;CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短&#xff0c;所以CPU会不断地切换线程执行&#xff0c;从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...

爬虫基础学习day2

# 爬虫设计领域 工商&#xff1a;企查查、天眼查短视频&#xff1a;抖音、快手、西瓜 ---> 飞瓜电商&#xff1a;京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空&#xff1a;抓取所有航空公司价格 ---> 去哪儿自媒体&#xff1a;采集自媒体数据进…...

什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南

文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/55aefaea8a9f477e86d065227851fe3d.pn…...

Mobile ALOHA全身模仿学习

一、题目 Mobile ALOHA&#xff1a;通过低成本全身远程操作学习双手移动操作 传统模仿学习&#xff08;Imitation Learning&#xff09;缺点&#xff1a;聚焦与桌面操作&#xff0c;缺乏通用任务所需的移动性和灵活性 本论文优点&#xff1a;&#xff08;1&#xff09;在ALOHA…...

2025季度云服务器排行榜

在全球云服务器市场&#xff0c;各厂商的排名和地位并非一成不变&#xff0c;而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势&#xff0c;对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析&#xff1a; 一、全球“三巨头”…...

【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论

路径问题的革命性重构&#xff1a;基于二维拓扑收缩色动力学模型的零点隧穿理论 一、传统路径模型的根本缺陷 在经典正方形路径问题中&#xff08;图1&#xff09;&#xff1a; mermaid graph LR A((A)) --- B((B)) B --- C((C)) C --- D((D)) D --- A A -.- C[无直接路径] B -…...