IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 【图像处理】opencv | 形态学运算:腐蚀,膨胀,开运算,闭运算| 二值图像处理 -> 正文阅读

[人工智能]【图像处理】opencv | 形态学运算:腐蚀,膨胀,开运算,闭运算| 二值图像处理


前言

参考视频:opencv教学
参考教材:《数字图像处理基础》
我的代码基本是跟着B站的视频里面敲了一遍,然后结合教材对指定区域做了一些加强学习

一、腐蚀和膨胀

首先需要知道的是,形态学运算主要针对二值化图像。
所以在进行形态学操作前 ,我们首先应该将图像转为二值化图像

import numpy as np
X1=cv2.imread('xinpian.jpeg',0)
thresh,img = cv2.threshold(X1, thresh=128, maxval=255, type=cv2.THRESH_BINARY)

在这里插入图片描述
如图我是生成了一张芯片的二值化图像

1.1腐蚀

紧接着我们调用腐蚀命令进行操作,需要定义一个内核kernel

kernel=np.ones((5,5),np.uint8)
crosion=cv2.erode(img,kernel,iterations=1)

实现的效果如下:
在这里插入图片描述
可以看到很多较细的部分 被腐蚀掉了
1)接下来我们探讨一下不同大小的kernel对于图像的腐蚀效果差异是什么样子的?:
分别设置内核大小如下:

crosion2=cv2.erode(img,kernel2,iterations=1)
crosion3=cv2.erode(img,kernel3,iterations=1)
crosion4=cv2.erode(img,kernel4,iterations=1)
crosion5=cv2.erode(img,kernel5,iterations=1)

在这里插入图片描述
应该是内核越大,腐蚀的越狠。
整体代码:

import cv2
import numpy as np

X1=cv2.imread('xinpian.jpeg',0)
thresh,img = cv2.threshold(X1, thresh=128, maxval=255, type=cv2.THRESH_BINARY)

cv2.imshow('xinpian',img)
cv2.waitKey(0) #0为任意键位终止
cv2.destroyAllWindows()

kernel2=np.ones((2,2),np.uint8)
kernel3=np.ones((3,3),np.uint8)
kernel4=np.ones((4,4),np.uint8)
kernel5=np.ones((5,5),np.uint8)

crosion2=cv2.erode(img,kernel2,iterations=1)
crosion3=cv2.erode(img,kernel3,iterations=1)
crosion4=cv2.erode(img,kernel4,iterations=1)
crosion5=cv2.erode(img,kernel5,iterations=1)
cv2.imshow('fushi2',crosion2)
cv2.imshow('fushi3',crosion3)
cv2.imshow('fushi4',crosion4)
cv2.imshow('fushi5',crosion5)
cv2.waitKey(0) #0为任意键位终止
cv2.destroyAllWindows()

2)接下来我们探讨一下迭代次数的大小对于图像的腐蚀效果差异是什么样子的?:
分别设置迭代次数如下:

crosion1=cv2.erode(img,kernel,iterations=1)
crosion2=cv2.erode(img,kernel,iterations=2)
crosion3=cv2.erode(img,kernel,iterations=3)
crosion4=cv2.erode(img,kernel,iterations=4)

在这里插入图片描述
当然肯定是迭代次数越多,腐蚀越明显。
完整代码:

import cv2
import numpy as np

X1=cv2.imread('xinpian.jpeg',0)
thresh,img = cv2.threshold(X1, thresh=128, maxval=255, type=cv2.THRESH_BINARY)

cv2.imshow('xinpian',img)
cv2.waitKey(0) #0为任意键位终止
cv2.destroyAllWindows()

kernel=np.ones((2,2),np.uint8)


crosion1=cv2.erode(img,kernel,iterations=1)
crosion2=cv2.erode(img,kernel,iterations=2)
crosion3=cv2.erode(img,kernel,iterations=3)
crosion4=cv2.erode(img,kernel,iterations=4)
cv2.imshow('fushi1',crosion1)
cv2.imshow('fushi2',crosion2)
cv2.imshow('fushi3',crosion3)
cv2.imshow('fushi4',crosion4)
cv2.waitKey(0) #0为任意键位终止
cv2.destroyAllWindows()

1.2膨胀

膨胀运算和腐蚀运算就是反过来的

import cv2
import numpy as np

X1=cv2.imread('xinpian.jpeg',0)
thresh,img = cv2.threshold(X1, thresh=128, maxval=255, type=cv2.THRESH_BINARY)
cv2.imshow('xinpian',img)
cv2.waitKey(0) #0为任意键位终止
cv2.destroyAllWindows()

kernel=np.ones((5,5),np.uint8)
crosion=cv2.dilate(img,kernel,iterations=1)
cv2.imshow('fushi',crosion)
cv2.waitKey(0) #0为任意键位终止
cv2.destroyAllWindows()

最后的膨胀效果:

在这里插入图片描述
改变参数效果和腐蚀运算类似,这就不单独再列出了。

二、开运算与闭运算

1)开运算简单的说,就是对图像先腐蚀再膨胀
直接上代码看看

import cv2
import numpy as np

X1=cv2.imread('xinpian.jpeg',0)
thresh,img = cv2.threshold(X1, thresh=128, maxval=255, type=cv2.THRESH_BINARY)
cv2.imshow('xinpian',img)
cv2.waitKey(0) #0为任意键位终止
cv2.destroyAllWindows()

kernel=np.ones((5,5),np.uint8)
crosion=cv2.morphologyEx(img,cv2.MORPH_OPEN,kernel)
cv2.imshow('fushi',crosion)
cv2.waitKey(0) #0为任意键位终止
cv2.destroyAllWindows()

在这里插入图片描述
2)闭运算简单的说,就是对图像先膨胀再腐蚀

import cv2
import numpy as np

X1=cv2.imread('xinpian.jpeg',0)
thresh,img = cv2.threshold(X1, thresh=128, maxval=255, type=cv2.THRESH_BINARY)
cv2.imshow('xinpian',img)
cv2.waitKey(0) #0为任意键位终止
cv2.destroyAllWindows()

kernel=np.ones((5,5),np.uint8)
crosion=cv2.morphologyEx(img,cv2.MORPH_OPEN,kernel)
cv2.imshow('fushi',crosion)
cv2.waitKey(0) #0为任意键位终止
cv2.destroyAllWindows()

在这里插入图片描述

三、礼帽与黑帽

礼帽运算:原始图像减去开运算图像
黑帽运算:闭运算图像减去原始图像
1)礼帽:

import numpy as np

X1=cv2.imread('xinpian.jpeg',0)
thresh,img = cv2.threshold(X1, thresh=128, maxval=255, type=cv2.THRESH_BINARY)

kernel=np.ones((5,5),np.uint8)
crosion=cv2.morphologyEx(img,cv2.MORPH_TOPHAT,kernel)
cv2.imshow('xinpian',img)
cv2.imshow('limao',crosion)
cv2.waitKey(0) #0为任意键位终止
cv2.destroyAllWindows()

在这里插入图片描述
2)黑帽:

import cv2
import numpy as np

X1=cv2.imread('xinpian.jpeg',0)
thresh,img = cv2.threshold(X1, thresh=128, maxval=255, type=cv2.THRESH_BINARY)


kernel=np.ones((5,5),np.uint8)
crosion=cv2.morphologyEx(img,cv2.MORPH_BLACKHAT,kernel)
cv2.imshow('xinpian',img)
cv2.imshow('heimao',crosion)
cv2.waitKey(0) #0为任意键位终止
cv2.destroyAllWindows()

在这里插入图片描述

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-12-25 11:10:19  更:2022-12-25 11:12:07 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 22:19:22-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码