图像预处理方法

news2024/12/28 20:03:10

图像预处理

膨胀腐蚀概述

两个基本的形态学操作是腐 和膨胀。他们 的变体构成了开运算 ,闭运算, 梯度等。
根据卷积核的大小前景的所有像素会腐 掉 变为 0 ,所以前景物体会变小整幅图像的白色区域会减少。
对于去除白噪声很有用 也可以用来断开两个 在一块的物体等。

函数原型:

cv2.dilate(src, kernel, dst=None, anchor=None, iterations=None, borderType=None, borderValue=None)

⚫src: 输入原图像(建议为二值图)
⚫dst: 输出图像要求和src一样的尺寸和类型
⚫kernel: 膨胀操作的核, 当为NULL时, 表示使用参考点位于中心的3x3的核
⚫anchor: 锚的位置, 默认值Point(-1,-1), 表示位于中心
⚫interations: 膨胀的次数
⚫borderType: 边界模式, 一般采用默认值
⚫borderValue: 边界值, 一般采用默认值

代码示例:
import cv2
import numpy as np

img = cv2.imread(‘…/datas/snowqueen.png’, 0)
cv2.imshow(‘j.png’, img)
print(img.shape)

kernel = np.ones((7, 7), np.uint8)
kernel17 = np.ones((1, 7), np.uint8)
kernel71 = np.ones((7, 1), np.uint8)
dilation = cv2.dilate(img, kernel, iterations=1)
dilation17 = cv2.dilate(img, kernel17, iterations=1)
dilation71 = cv2.dilate(img, kernel71, iterations=1)
cv2.imshow(‘dilation’, np.hstack([img, dilation, dilation17, dilation71]))
cv2.moveWindow(‘dilation’, x=img.shape[1], y=0)

cv2.waitKey(0)
cv2.destroyAllWindows()

import cv2
import numpy as np

img = cv2.imread('../datas/snowqueen.png', 0)
cv2.imshow('j.png', img)
print(img.shape)

kernel = np.ones((7, 7), np.uint8)
kernel17 = np.ones((1, 7), np.uint8)
kernel71 = np.ones((7, 1), np.uint8)
dilation = cv2.dilate(img, kernel, iterations=1)
dilation17 = cv2.dilate(img, kernel17, iterations=1)
dilation71 = cv2.dilate(img, kernel71, iterations=1)
cv2.imshow('dilation', np.hstack([img, dilation, dilation17, dilation71]))
cv2.moveWindow('dilation', x=img.shape[1], y=0)

cv2.waitKey(0)
cv2.destroyAllWindows()

原图:
在这里插入图片描述
效果图:
在这里插入图片描述

2)腐蚀—cv2.erode()

与腐蚀相反 与卷积核对应的原图像的像素值中只有一个是 1 中心元 素的像素值就是 1。所以 该操作会增加图像中的白色区域 前景 。一般在去噪声时先用腐再用膨胀。因为腐在去掉白噪声的同时 也会使前景对变小。所以我们再对他 膨胀。 时噪声已经 去 了 不会再回来了 但是 前景 在并会增加。膨胀也可以用来 接两个分开的物体。

函数原型:

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

代码示例:

import cv2
import numpy as np

img = cv2.imread(‘…/datas/snowqueen.png’, 0)
cv2.imshow(‘j.png’, img)
print(img.shape)

#您可以将内核看作是一个小矩阵,我们在图像上滑动以进行(卷积)操作,例如模糊,锐化,边缘检测或其他图像处理操作。
kernel = np.ones((5, 5), np.uint8)
#cv2.getStructuringElement(shape, ksize)

erosion = cv2.erode(img, kernel, iterations=1)
dilation = cv2.dilate(img, kernel, iterations=1)
print(img.shape, erosion.shape, dilation.shape)
cv2.imshow(‘erode’, np.hstack([img, erosion, dilation]))
cv2.moveWindow(‘erode’, x=img.shape[1], y=0)

cv2.waitKey(0)
cv2.destroyAllWindows()


import cv2
import numpy as np

img = cv2.imread('../datas/snowqueen.png', 0)
cv2.imshow('j.png', img)
print(img.shape)

#您可以将内核看作是一个小矩阵,我们在图像上滑动以进行(卷积)操作,例如模糊,锐化,边缘检测或其他图像处理操作。
kernel = np.ones((5, 5), np.uint8)
# cv2.getStructuringElement(shape, ksize)

erosion = cv2.erode(img, kernel, iterations=1)
dilation = cv2.dilate(img, kernel, iterations=1)
print(img.shape, erosion.shape, dilation.shape)
cv2.imshow('erode', np.hstack([img, erosion, dilation]))
cv2.moveWindow('erode', x=img.shape[1], y=0)

cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述

在这里插入图片描述

形态学其他操作:

开运算、闭运算、顶帽、黒帽、形态学梯度

核心函数:

cv2.morphologyEx(src, op, kernel, dst=None, anchor=None, iterations=None, borderType=None, borderValue=None)

⚫src: 输入原图像
⚫dst: 输出图像要求和src一样的尺寸和类型
⚫op: 表示形态学运算的类型, 可以取如下值:

CV2 .MORPH DILATE
CV2 .MORPH
OPEN # 开运算
CV2 .MORPH_ TOPHAT #顶帽
CV2 .MORPH_ ERODE
CV2.MORPH CLOSE #闭运算
CV2 .MORPH
BLACKHAT #黒帽
CV2.MORPH_ GRADIENT #形态学梯度
⚫kernel: 形态学运算内核, 若为NULL, 表示使用参考点位于中心的3x3内核, 一般使用getStruecuringElement函数获得
⚫anchor: 锚的位置, 默认值Point(-1,-1), 表示位于中心
⚫interations: 迭代使用函数的次数, 默认为1
⚫borderType: 边界模式, 一般采用默认值
⚫borderValue: 边界值, 一般采用默认值

1)开运算(open)

基于膨胀腐蚀基础, 利用cv2.morphologyEx()函数进行操作
开运算是先腐蚀后膨胀的过程, 开运算可以用来消除小物体, 在纤细点处分离物体, 并在平滑较大物体边界的同时不明显的改变其面积。

2)闭运算(close)

闭运算是先膨胀后腐蚀的过程, 闭运算可以用来消除小型黑洞(黑色区域)。

3)形态学梯度(Gradient)

形态学梯度是膨胀图与腐蚀图之差, 对二值图可以将团块(blob)边缘凸显出来, 可以用其来保留边缘轮廓。

4)顶帽(Top Hat)

顶帽运算也被称为”礼帽”, 是开运算结果和原图像做差的结果, 可以用来分离比邻近点亮一些的斑块。

5)黒帽(Black Hat)

黑帽运算是原图像和开运算做差的结果, 可以用来分离比邻近点暗一些的斑块。

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

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

相关文章

推荐系统搭建全程图文攻略

推荐系统搭建全程图文攻略 推荐系统架构简介 整体推荐架构图: 推荐整体从数据处理开始,默认数据从关系型数据到每天增量导入到hive,在hive中通过中间表和调用python文件等一系列操作,将数据处理为算法数学建模的入口数据&#x…

【SVN】在Windows系统上进行SVN的基本操作(检出,更新,提交,分支合并分支,还原,制造冲突以及解决冲突,忽略)

介绍 这里是小编成长之路的历程,也是小编的学习之路。希望和各位大佬们一起成长! 以下为小编最喜欢的两句话: 要有最朴素的生活和最遥远的梦想,即使明天天寒地冻,山高水远,路远马亡。 一个人为什么要努力&a…

其实苹果知道自己离不开中国制造,因此悄悄给自己留了后路

苹果在加速离开中国,不过从苹果的做法却又可以看到它其实很清醒地认识到无法离开中国制造,因此它在力推印度制造的时候,其实并没拼尽全力,深刻认识到印度制造和印度市场与中国的差距。 一、印度制造和印度市场与中国的差距 2022年…

防雷知识:什么是雷电浪涌

浪涌是突然发生并超过典型工作电压的过电压。一般来说,浪涌是电路中短暂的电流、电压或功率波。今天我们就来科普一下什么是雷电浪涌。 什么是浪涌? 浪涌,顾名思义,是一种突然发生并超过典型工作电压的过电压。一般来说&#xf…

工具链和其他-异步模块加载

目录 CMD/AMD Asynchronous Module Definition(AMD异步模块定义,语法风格) Common Module Definition ES6/CommonJS CommonJS ES6 Module 加载器示例 总结 cmd和amd的区别 现在有哪些异步加载方式 整体结构 编程:commonjs es6 module (有可能解…

基于STM32和oneNET云平台的数据采集系统(MQTT协议)

文章目录 前言一、onenet云平台产品创建二、硬件选择三、设计理念四、实战编程1. 传感器部分2. ESP82663. 定时器4. 串口5. MQTT 五、进阶练习 前言 该篇为基于stm32esp8266通过mqtt协议连接onenet物联网云平台,单片机部分将采集到的数据(温湿度、光照强度、压强等…

DX云音乐(安卓)

首先,软件安装好不用注册登录就可以直接使用,在首页这里有很多推荐的热门歌单,比如,有年度热门的DJ歌曲,有抖音热门DJ,有各种跨年晚会,有运动必备的DGM,有90后的经典旋律等等。 还有…

php+vue 校友交流平台

1.普通用户功能分析 (1)用户注册:用于注册校友录用户。 (2)用户登录:供校友录用户登录。 (3)资料修改:修改当前登录使用者信息。 (4)…

MQTT 5协议中的基础更改(一)

01 协议的基础性变化 MQTT 5是对现有协议规范的重大更新,新版本协议具有以下特征:轻量级、易用性、极强的可扩展性、对移动网络的适用性以及通信参与者的解耦。 02 MQTT仍然是MQTT 如果您熟悉MQTT3.1.1,那么您之前知道的关于MQTT的所有原则…

通用策略03丨RUMI魔改+krange自适应第3版

量化策略开发,高质量社群,交易思路分享等相关内容 正 文 大家好,今天我们分享2023年度第3期策略——RUMI魔改krange自适应离场第3版迭代。 本期策略是2023年通用系列第3篇。本期主要内容有对RUMI原版的逻辑魔改,其次重点针对kra…

关于Open Shift(OKD) 中 用户认证、权限管理、SCC 管理的一些笔记

写在前面 因为参加考试,会陆续分享一些 OpenShift 的笔记博文内容为 openshift 用户认证和权限管理以及 scc 管理相关笔记学习环境为 openshift v3 的版本,有些旧这里如果专门学习 openshift ,建议学习 v4 版本理解不足小伙伴帮忙指正 对每个…

数据库管理新定义:一款纯Web化免费SQL开发工具,免安装

SQL Studio是一款由麦聪软件研发的多数据库管理工具,提供Windows、Linux 和 MacOS三种版本的软件包,支持中英文两种语言。SQL Studio是用Java编写的,默认使用 JDK 8进行编译。 下载看这里: [SQLStudio] (http://www.maicongs.com/#/home/web)…

云HIS(二级医院,乡镇医院,民营医院,标准化HIS医院信息管理系统源码)

传统 HIS(基于医院信息系统) 和云 HIS(基于云计算的医院信息系统)各有优缺点,选择哪种系统需要根据具体情况进行权衡。 传统 HIS 系统通常由医院自行开发和维护,适用于医院内部信息化程度较高、数据安全性…

Sql 优化工具

1、背景 对于正在运行的mysql 性能如何?参数设置的是否合理?账号设置的是否存在安全隐患? 对于Sql执行效率又如何?如何了然于胸? show profile, explain,slow query log ,索引优化&#xff0…

【切负荷】计及切负荷和直流潮流(DC-OPF)风-火-储经济调度模型研究【IEEE24节点】(Python代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

Qt实现滑动条平滑效果

效果图 基于QPropertyAnimation实现 代码部分 //设置滑动条动画 m_scrollAnimationnew QPropertyAnimation; m_scrollAnimation->setTargetObject(this); m_scrollAnimation->setPropertyName("value"); m_scrollAnimation->setEasingCurve(QEasingCurve:…

如何在已创建的SpringBoot项目基础上添加依赖

假设此时已经创建了一个SpringBoot项目,在使用的时候发现缺少 lombok 依赖,此时如何在不创建新项目的基础上添加该依赖?有两种方式: 通过Maven中央仓库导入依赖使用插件EditStarters导入依赖 1,通过Maven中央仓库导入依…

CVE-2023-21839 Weblogic远程代码执行漏洞复现

目录 0x01 声明: 0x02 简介: 0x03 漏洞概述: 0x04 影响版本: 0x05 环境搭建: Docker环境搭建: 漏洞环境搭建: 1、编辑docker-compose.yml 2、启动docker 3、访问页面: 0x…

PM不想做项目管理了,还能干点啥?

做项目经理太累了! 那么 不做项目经理还能做什么呢? 01 铁锅批发商 毕竟 当项目经理的时候 已经囤积了成百上千口锅 十年背锅经验不是瞎吹 并且可现场演示铁锅烙饼 老板亲授,真实还原,充饥必备 02 Office优化师 当项目…