Open CV系列学习笔记(二十二)其他形态学操作 2021-02-15

Open CV系列学习笔记(二十二)其他形态学操作

顶帽

又称礼帽,是原始图像与进行开运算之后得到的图像的差。
因为开运算到来的结果是放大了裂痕或者局部低亮度的区域,因此,从原图中减去运算后的图,得到的效果图突出了比原图轮廓周围的区域更明亮的区域,且这一操作和选择的核的大小相关。
顶帽运算往往用来分离比邻近点亮一些的斑块。当一幅图像具有大幅的背景的时候,而微小物品比较有规律的情况下,可以使用顶帽运算进行背景提取。
在这里插入图片描述

代码:

def hat_gray_demo(image):
    gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY)
    kernel = cv.getStructuringElement(cv.MORPH_RECT,(15,15))
    dst = cv.morphologyEx(gray,cv.MORPH_TOPHAT,kernel)
    cimage = np.array(gray.shape,np.uint8)
    cimage = 100
    dst = cv.add(dst, cimage)
    cv.imshow("gray_hat",dst)

结果:
在这里插入图片描述

黑帽

是进行闭运算以后得到的图像与原图像的差。
黑帽运算之后的效果图突出了与原图像轮廓周围的区域更暗的区域,且这一操作和选择的核大小相关。所以黑帽运算用来分离比邻近点暗一些的斑块。
在这里插入图片描述
代码:

def hat_binary_demo(image):
    gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY)
    ret,binary = cv.threshold(gray,0,255,cv.THRESH_BINARY | cv.THRESH_OTSU)
    kernel = cv.getStructuringElement(cv.MORPH_RECT,(5,5))
    dst = cv.morphologyEx(binary,cv.MORPH_GRADIENT,kernel)
    cv.imshow("binary_hat",dst)

结果:
在这里插入图片描述

形态学梯度—Gradient

 基本梯度
基本梯度是用膨胀后的图像减去腐蚀后的图像得到差值
图像,称为梯度图像也是opencv中支持的计算形态学
梯度的方法,而此方法得到梯度有被称为基本梯度。
 内部梯度
是用原图像减去腐蚀之后的图像得到差值图像,称为图
像的内部梯度
 外部梯度
图像膨胀之后再减去原来的图像得到的差值图像,称为
图像的外部梯度
代码:

def gradient2_demo(image):
    kernel = cv.getStructuringElement(cv.MORPH_RECT, (5, 5))
    dm = cv.dilate(image,kernel)
    em = cv.erode(image,kernel)
    dst1 = cv.subtract(image,em)#内梯度
    dst2 = cv.subtract(dm,image)#外梯度
    cv.imshow("internal",dst1)
    cv.imshow("external",dst2)

结果:
在这里插入图片描述

完整代码:

import cv2 as cv
import numpy as np


def hat_gray_demo(image):
    gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY)
    kernel = cv.getStructuringElement(cv.MORPH_RECT,(15,15))
    dst = cv.morphologyEx(gray,cv.MORPH_TOPHAT,kernel)
    cimage = np.array(gray.shape,np.uint8)
    cimage = 100
    dst = cv.add(dst, cimage)
    cv.imshow("gray_hat",dst)


def hat_binary_demo(image):
    gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY)
    ret,binary = cv.threshold(gray,0,255,cv.THRESH_BINARY | cv.THRESH_OTSU)
    kernel = cv.getStructuringElement(cv.MORPH_RECT,(5,5))
    dst = cv.morphologyEx(binary,cv.MORPH_GRADIENT,kernel)
    cv.imshow("binary_hat",dst)


def gradient2_demo(image):
    kernel = cv.getStructuringElement(cv.MORPH_RECT, (5, 5))
    dm = cv.dilate(image,kernel)
    em = cv.erode(image,kernel)
    dst1 = cv.subtract(image,em)#内梯度
    dst2 = cv.subtract(dm,image)#外梯度
    cv.imshow("internal",dst1)
    cv.imshow("external",dst2)


print("--------HEllow Python-------")
src = cv.imread("E:/picture/39.jpg")
cv.namedWindow("input image",cv.WINDOW_AUTOSIZE)
cv.imshow("input image",src)
gradient2_demo(src)
cv.waitKey(0)


cv.destroyAllWindows()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值