OpenCv初学者笔记(三):开运算、闭运算、梯度计算

目录

一、开运算与闭运算

1. 图像开运算

2.图像闭运算

二、图像梯度运算

三、礼帽运算与黑帽运算


一、开运算与闭运算

1. 图像开运算

        开运算是图像依次经过腐蚀膨胀处理后的过程。图像被腐蚀后,去除了噪声,但是也压缩了图像;接着对腐蚀过的图像进行膨胀处理,并保留原有图像。

        图像开运算使用函数 morphologyEx() ,参数cv2.MORPH_OPEN对应开运算

2.图像闭运算

        闭运算是图像依次经过膨胀、腐蚀处理后的过程。图像先膨胀,后腐蚀,它有助于关闭前景物体内部的小孔,或物体上的小黑点。

        图像闭运算使用函数 morphologyEx() ,参数 cv2.MORPH_CLOSE 对应闭运算。        

import cv2
import numpy as np

# 读取并修改图片大小
img = cv2.imread('dc.jpg', 0)
img = cv2.resize(img, dsize=(500, 400))

#设置卷积核
kernel = np.ones((5, 5), np.uint8)
# 开运算
opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)

#设置卷积核
kernel = np.ones((5, 5), np.uint8)
# 闭运算
closing = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)

# 堆叠显示并保存原图、开运算、闭运算之后的图像
res = np.hstack((img, opening, closing))
cv2.imshow('res', res)
cv2.imwrite('./yunsuan.jpg', res)

cv2.waitKey(0)

cv2.destroyAllWindows()

(结果如图 ,从左到右依次为:原图开运算闭运算

 我们大概可以发现,开运算把黑色目标中的白色噪声去掉了,闭运算把白色目标中的黑色噪声去掉了。

接下来我们再看一组结果(从上到下以依次为原图、开运算、闭运算):

 (怎么样,效果是不是更明显了)


二、图像梯度运算

梯度运算:膨胀图像 — 腐蚀图像

图像梯度运算是膨胀图像减去腐蚀图像的结果,得到图像的轮廓,其中二值图像1表示白色点,0表示黑色点。

import cv2
import numpy as np

# 读取并修改图片大小
img = cv2.imread('erode1.png', 0)
img = cv2.resize(img, dsize=(500, 300))


# 梯度运算
kernel = np.ones((3, 3), np.uint8)
gradient = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel)

# 显示梯度运算之后的图像
cv2.imshow('gradient', gradient)
cv2.imwrite('./gradient.jpg', gradient)

cv2.waitKey(0)

cv2.destroyAllWindows()

如下图所示:

 

三、礼帽运算与黑帽运算

礼帽=原始输入-开运算结果

import cv2
import numpy as np

# 读取并修改图片大小
img = cv2.imread('tophat.png', 0)
img = cv2.resize(img, dsize=(500, 300))

# 礼帽运算
kernel = np.ones((5, 5), np.uint8)
tophat = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel)

res = np.vstack((img, tophat))

cv2.imshow('tophat', res)
cv2.imwrite('./tophat.jpg', res)

cv2.waitKey(0)
cv2.destroyAllWindows()

 运行结果:

 

黑帽=闭运算结果-原始输入

import cv2
import numpy as np

# 读取并修改图片大小
img = cv2.imread('tophat.png', 0)
img = cv2.resize(img, dsize=(500, 300))

# 黑帽运算
kernel = np.ones((5, 5), np.uint8)
blackhat = cv2.morphologyEx(img, cv2.MORPH_BLACKHAT, kernel)

res = np.vstack((img, blackhat))

cv2.imshow('blackhat', res)
cv2.imwrite('./blackhat.jpg', res)

运行结果:

 

 

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值